如何将URL参数传递给渲染的symfony3表单?

时间:2017-04-27 06:32:24

标签: symfony twig symfony-forms

如果我在一个树枝模板中嵌入一个控制器,如何将所需的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参数传递给嵌入式控制器的正确方法是什么?

1 个答案:

答案 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方法。