我需要从symfony2访问twig中的实体。 在控制器内部,我可以做一些事情:
return $this->render('frontendBundle::carrodecompras.html.twig', array(
'entity' => $entity
));
然后在树枝上我可以使用entity.name
等访问实体属性。
我需要使用函数redirectToRoute()
return $this->redirectToRoute('frontend_carrodecompras', array(
'entity' => $entity,
));
但它似乎不起作用。
我收到以下错误:
变量"实体"在第32行的frontendBundle :: carrodecompras.html.twig中不存在
编辑:我正在使用Symfony 2.7变量$ entity存在(它实际上在应用程序中称为$ cortina,我使用$ entity进行简化),就在redirectToRoute函数之前,我这样做是为了测试它
echo "<pre>";
var_dump($cortina);
echo "</pre>";
return $this->redirectToRoute('frontend_carrodecompras', array(
'cortina' => $cortina,
));
结果如下:
object(dexter\backendBundle\Entity\cortina)#373 (16) {
["id":"dexter\backendBundle\Entity\cortina":private]=>
int(3)
...
这是Twig代码:
<tr>
{% set imagentela = "img/telas/" ~ cortina.codInterno ~ ".jpg" %}
<td><img src="{{ asset(imagentela | lower ) }}" alt="" width="25" height="25">
</td>
<td>{{ cortina.nombre }}</td>
<td>{{ "$" ~ cortina.precio|number_format('0',',','.') }}</td>
</tr>
答案 0 :(得分:14)
当您从控制器调用redirectToRoute($route, array $parameters)
时,$parameters
用于生成网址令牌,而不是用于在视图中呈现的变量,这由分配给您重定向到的路由的控制器完成。
示例:
class FirstController extends Controller
{
/**
* @Route('/some_path')
*/
public function someAction()
{
// ... some logic
$entity = 'some_value';
return $this->redirectToRoute('some_other_route', array('entity' => $entity)); // cast $entity to string
}
}
class SecondController extends Controller
{
/**
* @Route('/some_other_path/{entity}', name="some_other_route")
*/
public function otherAction($entity)
{
// some other logic
// in this case $entity equals 'some_value'
$real_entity = $this->get('some_service')->get($entity);
return $this->render('view', array('twig_entity' => $real_entity));
}
}
答案 1 :(得分:1)
parseInt(value, 10)
是$this->redirectToRoute('something', array('id' => 1)
的便利包装器。它使用params构建一个URL,并期望params的值为字符串或数字。
http://symfony.com/blog/new-in-symfony-2-6-new-shortcut-methods-for-controllers
您需要传递实体的ID,然后在新操作中获取数据,或者在遇到redirectToRoute()调用之前将其分解为单个数据片段。
$this->redirect($this->generateUrl('something', array('id' => 1)))