我目前正在Symfony开发一个小网站,访问者可以在那里评论人道主义项目。一个项目可以有多个注释(oneToMany关系)。
在Project show.html.twig页面上,我正在呈现Comment new表单。
{{ render(controller('DbeDonaciBundle:Comment:new')) }}
现在,如果有人创建一个评论,我需要分配当前显示的项目。项目通过路由显示:
dbe_project_show:
pattern: /{id}/{name}/show
defaults: { _controller: "DbeDonaciBundle:Project:showProjectWithDetails" }
下面是注释的create Controller:
public function createAction(Request $request)
{
$entity = new Comment();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
// get current user
$entity->setUser($this->get('security.context')->getToken()->getUser());
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('dbe_comment_show', array('id' => $entity->getId())));
}
return $this->render('DbeDonaciBundle:Comment:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
我知道有两个选项:
- 添加一个包含项目id的隐藏字段到您的表单。
- 将你的项目id放在route中(因此也可以作为action参数)。
但是我仍然在努力使项目对象将其分配给注释。选项1如何运作?我如何得到当前项目进入隐藏字段的形式?
谢谢了!
试试这个:
{{ render(controller('DbeDonaciBundle:Comment:new',{'id': app.request.get('id')})) }}
在表单模板中添加:
<input type="hidden" name="id" value="{{ id }}"/>