如果我在一个树枝模板中嵌入一个控制器,如何将所需的URL参数传递给渲染的嵌入路径?
在以下示例中,图像属于相册,需要相册ID(它是复合键的一部分)
<tbody>
<tr>
<th>Id</th>
<td>{{ album.id }}</td>
</tr>
<tr>
<th>Name</th>
<td>{{ album.name }}</td>
</tr>
<tr>
{{ render(controller(
'AppBundle:Image:new',
{'album': album}
)) }}
</tr>
</tbody>
图像:新路径以以下注释为前缀
* @Route("{album}/image")
方法如下
public function newAction(Request $request, $album)
{
$image = new Image();
$form = $this->createForm(
'AppBundle\Form\ImageUploadType',
$image,
[
'action' => $this->generateUrl('image_new'),
'method' => 'POST',
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($image);
$em->flush();
return $this->redirectToRoute('image_show', array('id' => $image->getId()));
}
return $this->render('image/new.html.twig', array(
'image' => $image,
'form' => $form->createView(),
));
}
将我们嵌入该表单的模板呈现为导致以下错误的结果;
在渲染模板期间抛出异常(“缺少一些必需参数(”album“)以生成路径”image_new“的URL。”)。
使用symfony3.2和twig将URL参数传递给嵌入式控制器的正确方法是什么?
答案 0 :(得分:2)
Symfony抛出的错误不是关于传递ID,而是关于URL构建。
在你的代码中,你有这个片段:
$form = $this->createForm(
'AppBundle\Form\ImageUploadType',
$image,
[
'action' => $this->generateUrl('image_new'),
'method' => 'POST',
]
);
虽然它应该是:
$form = $this->createForm(
'AppBundle\Form\ImageUploadType',
$image,
[
'action' => $this->generateUrl('image_new',['album'=>$album,]),
'method' => 'POST',
]
);
只需将相册传递给generateUrl
方法。