2017-04-27 57 views
1

如果我在树枝模板中嵌入控制器,如何将所需的URL参数传递给呈现的嵌入式路径?如何将URL参数传递给呈现的symfony3表单?

在下面的示例中,图像属于一个相册,并且需要相册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(), 
    )); 
} 

将所述模板呈现使得w e已经将该表单嵌入结果中以下错误中;

在渲染模板期间抛出了一个异常(“缺少某些强制参数(”专辑“)以生成路由”image_new“的URL)。”)。

使用symfony3.2和twig将URL参数传递给嵌入式控制器的正确方法是什么?

+0

你确定错误来自控制器的嵌入? ''action'=> $ this-> generateUrl('image_new'),',这里强制参数丢失。由于它是一个嵌入的渲染导致的问题,但没有必要直接嵌入cal。 – Joe

回答

1

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