symfony2表单集合此表单不应包含额外的字段错误

时间:2014-12-11 14:35:28

标签: php forms symfony collections doctrine-orm

我有一个symfony表单,我用它来创建现有参数字符串的新实体。 Parametring工作正常。 如果创建新实体,我使用presetdata事件监听器来不渲染字段,因此只渲染原型。

在这种情况下,只有在我的数据库中不存在任何实体时,addind才能正常工作。如果已经有一行,它会抛出

  

此表单不应包含额外字段

错误。我将true设置为allow_add和allow_delete。关于问题是什么的任何想法?

我的控制器:

/**
 * @Route("/create", name="worker_create")
 * @Method({"POST","GET"})
 * @Template(":FoodAnalytics/Worker:create_worker.html.twig")
 * @param Request $request
 * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
 */
public function createWorkerAction(Request $request)
{
    $formManager = $this->get('form_manager');
    $createWorkerForm = $formManager->createForm(new UserUserWorkersType(false, '_create'), $this->getUser(), 'POST' , 'worker_create',null,'Enregistrer');
if ($request->getMethod() == 'POST')
{
    if ($formManager->handleRequestAndFlush($createWorkerForm, $this->getUser()))
    {
        $formManager->addSuccess('Les associés ont été rajoutés.');

        return $this->redirect($this->generateUrl('my_teams'));
    }

    return $this->render(
        ':FoodAnalytics/Team:my_teams.html.twig',
        array(
            'create_worker_form' => $createWorkerForm->createView(),
            'tab' => 'create_worker'
        ));
}

return array(
    'create_worker_form' => $createWorkerForm->createView()
);

}

我的第一张表格:

<?php
//src/AppBundle/Form/User/UserUserWorkersType.php
namespace AppBundle\Form\User\UserCollections;

use AppBundle\Form\FoodAnalytics\WorkerType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserUserWorkersType extends AbstractType
{
    private $displayExisting;
    private $suffix;

    public function __construct($displayExisting = true, $suffix)
    {
        $this->displayExisting = $displayExisting;
        $this->suffix = $suffix;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('workers', 'collection', array(
                    'type' => new WorkerType($this->displayExisting),
                    'by_reference' => false,
                    'allow_add' => true,
                    'allow_delete' => true,
                    'label' => 'Associés',
                ))
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => 'AppBundle\Entity\User\User',
            )
        );
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'appbundle_user_user_workers'.$this->suffix;
    }
}

我的收集表格:

<?php

namespace AppBundle\Form\FoodAnalytics;

use AppBundle\Entity\FoodAnalytics\Worker;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class WorkerType extends AbstractType
{
    private $displayExisting;

    public function __construct($displayExisting = true)
    {
        $this->displayExisting = $displayExisting;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event)
            {
                /** @var $worker Worker */
                $worker = $event->getData();
                $form = $event->getForm();

                if (!$worker || ($worker && $this->displayExisting))
                {
                    $form
                        ->add('title','choice',array(
                                'choices' => ['M.' => 'M.', 'Mme' => 'Mme'],
                                'label' => 'Titre',
                            ))
                        ->add('firstName','text',array(
                                'label' => 'Prénom',
                            ))
                        ->add('lastName','text',array(
                                'label' => 'Nom',
                            ))
                        ->add('position','text',array(
                                'label' => 'Poste occupé',
                            ))
                        ->add('totalCost','number',array(
                                'label' => 'Coût total mensuel (€)',
                                'required' => false,
                                'attr' => array(
                                    'data-toggle' => "tooltip",
                                    'data-placement' => "top",
                                    'title' => "Indiquez ici le coût total que représente le salarié par mois (salaires brut, primes, taxes, coûts cachés, etc). Cette donnée est totalement confidentielle.",
                                )))
                        ->add('weeklyHours','number',array(
                                'label' => "Durée de travail par semaine (h)",
                                'required' => false,
                                'attr' => array(
                                    'data-toggle' => "tooltip",
                                    'data-placement' => "top",
                                    'title' => "Indiquez ici la durée de travail hebdomadaire de votre associé. Cette donnée est totalement confidentielle.",
                                )));
                }
            });
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\FoodAnalytics\Worker'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'appbundle_foodanalytics_worker';
    }
}

0 个答案:

没有答案