我确实编辑了通知功能,并使用我的html字段覆盖默认表单小部件,此时不调用控制器,但我确实创建了它已正常工作的功能
{% extends 'base.html.twig' %}
{% block body %}
<h1>Notification edit</h1>
<form name="custom_edit" action="{{ path('notification_edit', { 'id' : notification.id }) }}" method="POST" {{ form_enctype(edit_form) }}>
<input type="text" name="notification[type]" required />
<input type="submit" value="Edit" />
</form>
{% endblock %}
这是我的控制器代码
/**
* Displays a form to edit an existing Notification entity.
*
* @Route("/{id}/edit", name="notification_edit")
* @Method({"GET", "POST"})
*/
public function editAction(Request $request, Notification $notification)
{
$deleteForm = $this->createDeleteForm($notification);
$editForm = $this->createForm('LencoBundle\Form\NotificationType', $notification);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$type = $editForm['type']->getData();
print_r($type);exit;
$em = $this->getDoctrine()->getManager();
$em->persist($notification);
$em->flush();
return $this->redirectToRoute('notification_edit', array('id' => $notification->getId()));
}
return $this->render('notification/edit.html.twig', array(
'notification' => $notification,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
但{{form_widget(edit_form)}}使用此小部件表单调用控制器工作
答案 0 :(得分:0)
http://symfony.com/doc/current/book/forms.html#forms-and-doctrine有一个很好的例子非常有帮助。
如果您使用实体类创建了表单,根据您的代码似乎就是这种情况,那么您就不需要编辑表单小部件。
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($notification);
$em->flush();
return $this->redirectToRoute(//Your route to success);
}
答案 1 :(得分:0)
根据您编写代码的方式,您将id字段传递给控制器并期望它使用对象(Notification类型)。
如果您使用param converter annotation
,则可以执行此操作您的控制器注释应该类似于;
CREATE temporary table temp (index (customerNumber))
SELECT customerNumber from purchaseOrder where somestatus = someStatus;
SELECT * from registeredUsers wherestatus
IN(Some values which mean the account is not active)
and customerNumber in (SELECT * from temp);
答案 2 :(得分:0)
最佳做法是使用form_widget,因为它采用表单的名称(LencoBundle\Form\NotificationType
)并将其用作输入的名称,在这种情况下,我想象您的表单getName()
函数返回&#34;通知&#34;它有一个名为&#34;类型&#34;的字段,否则它不会起作用。 (也许是拼写错误或骆驼名字)
您应该直接使用form_widget
,我建议您使用form_rest
自动将CSRF protection添加到您的表单中。您可以将其用于表单字段而不是整个字段,可以单独使用它,也可以将form_label
+ form_widget
+ form_errors
组合使用。
如果你需要修改渲染器的模板,你可以使用form themes无论如何使用Twig进行渲染。