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>
_
コントローラから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));
}
}
$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()
);
}
}