web-dev-qa-db-ja.com

メソッドredirectToRoute()はrender()のような引数を持つことができますか?

twig from symfony2のエンティティにアクセスする必要があります。コントローラー内で、次のように実行できます。

_return $this->render('frontendBundle::carrodecompras.html.twig', array(
        'entity' => $entity
));
_

そしてtwigでは、_entity.name_などでエンティティのプロパティにアクセスできます。

同じことを達成する必要がありますが、関数redirectToRoute()を使用します

_return $this->redirectToRoute('frontend_carrodecompras', array(
        'entity' => $entity,
));
_

しかし、それは機能していないようです。

次のエラーが発生します。

変数「エンティティ」は、32行目のfrontendBundle :: carrodecompras.html.twigに存在しません

編集:私はSymfony 2.7を使用しています

変数$ entityは存在します(単純化のために$ entityを使用していたアプリでは実際には$ cortinaと呼ばれます)、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>
_
7
enlego

コントローラからredirectToRoute($route, array $parameters)を呼び出すと、$parametersは、表示する変数ではなく、URLトークンを生成するために使用されます。これは、リダイレクト先のルートに割り当てられたコントローラーによって行われます。

例:

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));
    }
}
16
Heah

$this->redirectToRoute('something', array('id' => 1)$this->redirect($this->generateUrl('something', array('id' => 1)))の簡易ラッパーです。それはあなたのパラメーターでURLを構築し、パラメーターの値が文字列または数値であることを期待しています。

http://symfony.com/blog/new-in-symfony-2-6-new-shortcut-methods-for-controllers

エンティティのIDを渡して新しいアクションでデータをフェッチするか、redirectToRoute()呼び出しにヒットする前にエンティティを個々のデータに分割する必要があります。

class MyController extends Controller {
    public function myAction(){
        $cortina = new Cortina();
        $cortina->something = "Some text";

        $em = $this->getDoctrine()->getManager();
        $em->persist($cortina);
        $em->flush();

        return $this->redirectToRoute('frontend_carrodecompras', array(
            'id' => $cortina->getId()
        );
    }
}
1
SacWebDeveloper