选择类型的symfony上的动态表单



我正在尝试在两个选择列表上做一个动态表单,并且我试图遵循有关SYmfony的文档: http://symfony.com/doc/current/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms 但是正在使用两个实体,我必须使用选择列表 谁能帮我,这是我的用户:

$

builder
    ->add('at', ChoiceType::class, array(
        'label' => ' ',
        'choices' =>array(
            "42consulting.fr" => "42consulting.fr",
            "42consulting.lu" => "42consulting.lu",
            "42mediatvcom.fr" => "42mediatvcom.fr",
            "42consulting.ma" => "42consulting.ma",
            "42consulting.nl" => "42consulting.nl",
        ),
        'attr' => array(
            'class' => 'form-control',
            'placeholder' => 'service',
        ),
    )
);
$formModifier = function (FormInterface $form, User $at= null) {
    $services = null === $at ? array() :$at->getService();
    $form->add('service', ChoiceType::class, array(
                'label' => 'Service',
                'choices' => array(
                    "42Consulting Paris" => "Saint-Mandé",
                    "42Consulting Lux" => "Luxembourg",
                    "42MediaTelecom" => "Issy-Les-Moulineaux",
                    "42Consulting Maroc" => "Casablanca"
                ),
                'attr' => array(
                    'class' => 'form-control service',
                    'placeholder' => 'service',
                ),
            )
    );
};
$builder->addEventListener(
    FormEvents::PRE_SET_DATA,
    function (FormEvent $event) use ($formModifier) {
        $data = $event->getData();
        $formModifier($event->getForm(), $data->getAt());
    }
);
$builder->get('at')->addEventListener(
    FormEvents::POST_SUBMIT,
    function (FormEvent $event) use ($formModifier) {
        $at = $event->getForm()->getData();
        $formModifier($event->getForm()->getParent(), $at);
    }
);
我得到的错误是:类型错误:传递给 BackBundle\Form\UserType::BackBundle\Form

{closure}(( 的参数 2 必须是 BackBundle\Entity\User 的实例,给定字符串,在第 263 行的/home/work/Sites/backoffice-ad/src/BackBundle/Form/UserType.php 中调用(在此行上:$formModifier($event->getForm((->getParent((,$at(;)

在线

$formModifier = function (FormInterface $form, User $at= null) {

您的$at,如声明的那样,此参数必须是用户实体的实例。但是当你调用这个函数时,你传递了一个字符串:

$builder->addEventListener(
    FormEvents::PRE_SET_DATA,
    function (FormEvent $event) use ($formModifier) {
        $data = $event->getData();
        $formModifier($event->getForm(), $data->getAt());
    }
);

你试过吗:

$formModifier($event->getForm(), $data);

我不确定,但我认为这是调用 getAt(( 时的问题,此方法返回字符串。$data变量可能是用户实体的实例。

最新更新