【问题标题】:Symfony 3: How to submit forms in the collection of forms separately?Symfony 3:如何在表单集合中分别提交表单?
【发布时间】:2019-05-27 10:21:44
【问题描述】:

我想知道是否可以单独提交集合内的表单?我有很长的表单集合,带有按钮来保存每个子表单(基本上一次填写和验证表单会很困难)。所以点击按钮假设只提交相应的子表单,但它会提交整个集合。

getDoctrine()->getManager();

$user = $this->getUser();

if(!count($user->getApplicants())) {
$app = new Applicant();
$app->setUser($user);
$user->setApplicants($app);
}

if(!count($user->getAddresses())) {
$address = new Address();
$address->setUser($user);
$user->setAddresses($address);
}

if(!count($user->getCompanies())) {
$company = new Company();
$company->setUser($user);
$user->setCompanies($company);
}

if(!count($user->getDirectors())) {
$director = new Director();
$director->setUser($user);
$user->setDirectors($director);
}

$form = $this->createForm('AppBundle\Form\UserType', $user);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {

if ($form->getClickedButton() && 'submitApplicants' === $form- 
>getClickedButton()->getName()) {

$applicant = $form->getData()->getApplicants()[0];

$applicant->setUser($user);

$em->persist($applicant);

$em->flush();

return $this->render('admin/index.html.twig', [
'form' => $form->createView()
]);

}
if ($form->getClickedButton() && 'submitAddresses' === $form- 
>getClickedButton()->getName()) {

$address = $form->getData()->getAddresses()[0];

$em->persist($address);

$em->flush($address);

return $this->render('admin/index.html.twig', [
'form' => $form->createView()
]);

}

if ($form->getClickedButton() && 'submitCompanies' === $form- 
>getClickedButton()->getName()) {

$company = $form->getData()->getCompanies()[0];

$em->persist($company);
$em->flush($company);

return $this->render('admin/index.html.twig', [
'form' => $form->createView()
]);

}

if ($form->getClickedButton() && 'submitDirectors' === $form- 
>getClickedButton()->getName()) {

$director = $form->getData()->getDirectors()[0];

$em->persist($director);

$em->flush($director);

return $this->render('admin/index.html.twig', [
'form' => $form->createView()
]);

}

//$em->flush();
}

return $this->render('admin/index.html.twig', [
'form' => $form->createView()
]);
}
}

【问题讨论】:

    标签: symfony


    【解决方案1】:

    我的意见是您需要通过 Javascript 提交子表单。在提交按钮中添加一些js代码:

    1. 对控制器操作执行 ajax POST 请求
    2. 对表单数据进行一些检查
    3. 返回错误消息或一些 HTML(任何你想要的)
    4. 用那条消息做点什么

    这样您就可以分别提交每个表单。 还将提交按钮的类型更改为普通按钮。否则,您将触发整个页面的表单提交。

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多