Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Symfony中有多种形式。显示工作正常,但多个文件仍存在_Forms_Symfony_Twig - Fatal编程技术网

Forms Symfony中有多种形式。显示工作正常,但多个文件仍存在

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

我有一个用hiddens模态的表单页面。 表单来自具有不同ID的同一实体。 展示情态作品。对于我想要显示的每个模式,数据在输入中都是ok的。 问题是:当我提交表单时,每个表单(包括隐藏的)都会被持久化

//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]);
//(...)