方法redirectToRoute()是否有像render()这样的参数?

时间:2016-01-13 19:25:20

标签: php symfony redirect routing

我需要从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>

2 个答案:

答案 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)))