Php Symfony如何在登录后使表单有效
我有一个创建表单的新动作Php Symfony如何在登录后使表单有效,php,forms,symfony,Php,Forms,Symfony,我有一个创建表单的新动作 /** * Creates a new Vente entity. * * @Route("/new", name="vente_new") * @Method({"GET"}) */ public function newAction(Request $request) { $vente = new Vente(); $form = $this->createForm
/**
* Creates a new Vente entity.
*
* @Route("/new", name="vente_new")
* @Method({"GET"})
*/
public function newAction(Request $request) {
$vente = new Vente();
$form = $this->createForm('AppBundle\Form\VenteType', $vente);
return $this->render('vente/new.html.twig', array(
'vente' => $vente,
'form' => $form->createView(),
));
}
以及在成功登录后处理表单并使其有效的addAction:
/**
* Creates a new Vente entity.
*
* @Route("/add", name="vente_new_add")
* @Security("has_role('ROLE_USER')")
* @Method({"POST"})
*/
public function addAction(Request $request) {
//...
$user = $this->getUser();
//...
}
登录后,如何获取表单数据并进行处理?
如果用户未登录,我会在会话中存储表单数据,并在成功登录后进行处理。但我不知道怎么处理
有什么帮助吗?您应该让表单显示和处理在同一个控制器操作中,这样更简单。我理解,在您的情况下,您希望在处理表单之前记录用户,因此您必须有两个操作。除非您选择将表单置于同一防火墙和访问控制之下。如果您必须是具有正确角色的经过身份验证的用户才能查看和处理表单,则可以合并这两个步骤
否则,您可以序列化您的请求对象,或者尝试使用请求对表单进行水合并序列化表单对象。然后可以将这个序列化对象存储在会话中并取消序列化。请看一看JMS序列化程序包,它简单而高效。对于这种情况,我通常使用以下解决方案之一:
- 制作一个在弹出窗口中打开的AJAX登录表单,在提交表单之前打开它,确保仅当用户已经登录时才执行提交
- 将表单信息与其他数据一起保存在DB中,但具有特殊状态,或保存在单独的表中,然后仅需将ID存储在会话中,并在提交后链接到登录用户