Forms Symfony中有多种形式。显示工作正常,但多个文件仍存在
我有一个用hiddens模态的表单页面。 表单来自具有不同ID的同一实体。 展示情态作品。对于我想要显示的每个模式,数据在输入中都是ok的。 问题是:当我提交表单时,每个表单(包括隐藏的)都会被持久化Forms Symfony中有多种形式。显示工作正常,但多个文件仍存在,forms,symfony,twig,Forms,Symfony,Twig,我有一个用hiddens模态的表单页面。 表单来自具有不同ID的同一实体。 展示情态作品。对于我想要显示的每个模式,数据在输入中都是ok的。 问题是:当我提交表单时,每个表单(包括隐藏的)都会被持久化 //EditServiceType.php namespace Guillaume\PartnerManagerBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilde
//EditServiceType.php
namespace Guillaume\PartnerManagerBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class EditServiceType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', null, array(
'label_attr' => array('class' => 'col-form-label'),
'attr' => array('class' => 'form-control')
))
->add('type')
->add('version')
->add('connection_type', ChoiceType::class, array(
'choices' => array(
'Connected' => 2,
'Local' => 1,
)));
}/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Guillaume\PartnerManagerBundle\Entity\Service'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'edit_guillaume_partnermanagerbundle_service';
}
}
我的控制器的一部分
$formEdits = [];
$forms = [];
$serviceFormEdits = [];
foreach($services as $service) {
$serviceFormEdits[$service->getId()] = $em->getRepository('GuillaumePartnerManagerBundle:Service')->find($service);
$forms[$service->getId()] = $this->createForm('Guillaume\PartnerManagerBundle\Form\EditServiceType', $serviceFormEdits[$service->getId()]);
$formEdits[$service->getId()] = $forms[$service->getId()]->createView();
$forms[$service->getId()]->handleRequest($request);
if ($forms[$service->getId()]->isSubmitted() && $forms[$service->getId()]->isValid()) {
$em->persist($serviceFormEdits[$service->getId()]);
$em->flush();
$this->addFlash('notice', 'Service has been edited');
}
}
}
//(...)
return $this->render('GuillaumePartnerManagerBundle:customers:customer.html.twig', [
'formEdits' => $formEdits,
]);
我树枝的一部分(模态)
{%for result in results%}
{%form_主题formEdits[result.service.id]“bootstrap_4_horizontal_layout.html.twig%}
{{‘编辑环境’| trans}}
&时代;
{{form_start(formEdits[result.service.id])}
{{form_小部件(formEdits[result.service.id])}
{{'Cancel'| trans}}
{{'Validate'| trans}}
{{form_end(formEdits[result.service.id])}
{%endfor%}
我终于明白了
在选项解析程序中添加“id”
$forms[$service->getId()] = $this->createForm('Guillaume\PartnerManagerBundle\Form\EditServiceType', $serviceFormEdits[$service->getId()], ['id' => $service->getId()]);
添加隐藏在formType中的输入
->add('id', HiddenType::class, array(
'data' => $options['id'],
'mapped' => false,
))
当提交有效时,我使用此id
$postData = $request->request->get('edit_guillaume_partnermanagerbundle_service');
$postId = $postData['id'];
$forms[$postId]->handleRequest($request);
if ($forms[$postId]->isSubmitted() && $forms[$postId]->isValid()) {
$em->persist($serviceFormEdits[$postId]);
$em->flush($serviceFormEdits[$postId]);
//(...)
$postData = $request->request->get('edit_guillaume_partnermanagerbundle_service');
$postId = $postData['id'];
$forms[$postId]->handleRequest($request);
if ($forms[$postId]->isSubmitted() && $forms[$postId]->isValid()) {
$em->persist($serviceFormEdits[$postId]);
$em->flush($serviceFormEdits[$postId]);
//(...)