Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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
Php 如何将实体管理器作为选项从控制器传递到窗体类?错误:所需选项“0”;实体“管理人”;不见了_Php_Forms_Drop Down Menu_Symfony4_Entitymanager - Fatal编程技术网

Php 如何将实体管理器作为选项从控制器传递到窗体类?错误:所需选项“0”;实体“管理人”;不见了

Php 如何将实体管理器作为选项从控制器传递到窗体类?错误:所需选项“0”;实体“管理人”;不见了,php,forms,drop-down-menu,symfony4,entitymanager,Php,Forms,Drop Down Menu,Symfony4,Entitymanager,我试图在我的表单中创建一个动态下拉字段。下拉列表中的选项从表的“名称”字段获取。我已经使用form类创建了表单,并将entity_manager从我的控制器传递给form类 家庭类型-表单类 namespace App\Form; use App\Entity\Family; use App\Form\AddressType; use Symfony\Component\Form\AbstractType; use App\Entity\Vendor; //for radio buttons

我试图在我的表单中创建一个动态下拉字段。下拉列表中的选项从表的“名称”字段获取。我已经使用form类创建了表单,并将entity_manager从我的控制器传递给form类

家庭类型-表单类

namespace App\Form;

use App\Entity\Family;
use App\Form\AddressType;
use Symfony\Component\Form\AbstractType;
use App\Entity\Vendor;
//for radio buttons
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\Request;
class FamilyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $entityManager = $options['entity_manager'];
        $list = $entityManager->getRepository(Vendor::class)->getNameList();
        $arr = [];
        foreach($list as $key=>$value){
            foreach($value as $k=> $v){
                $arr[$v] = $v;
            }
        }


        $builder
            ->add('name', TextType::class, [
                'attr' => [
                    'placeholder' => 'Enter Name',
                ],
            ])
            ->add('contact', TelType::class, [
                'attr' => [
                    'placeholder' => 'Enter COntact number',
                ],
            ])
            ->add('gender', ChoiceType::class, [
                'choices' => $arr,
                'choices_as_values' => true, 'multiple' => false, 'expanded' => true,
            ]
            )
            ->add('address', AddressType::class, [
                //To get validation error for embeded form
                'constraints' => array(new Assert\Valid()),

            ])
            ->add('favorite_food', ChoiceType::class, [
                'choices'  => $arr,

            ])
            ->add('Save',SubmitType::class,[
                'attr' => [
                    'class' => 'btn btn-success '
                ]
            ])
        ;

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Family::class,
        ]);
        $resolver->setRequired('entity_manager');

    }   
}
->add('address', AddressType::class, [
                //To get validation error for embeded form
                'constraints' => array(new Assert\Valid()),
                'entity_manager' => $options['entity_manager']

            ])
家庭控制器:

public function familyFoodForm(Request $request)
    {
        $entityManager = $this->getDoctrine()->getManager();
        $family = new Family();
        $f_form = $this->createForm(FamilyType::class, $family, [
            'entity_manager' => $entityManager,
        ]);        
        $f_form->handleRequest($request);

        if ($f_form->isSubmitted()) {
            if ($f_form->isValid()) {

                $address = $family->getAddress();
                $entityManager->persist($address);
                $entityManager->flush();
                $entityManager->persist($family);
                $entityManager->flush();
                $this->addFlash('success', 'Welcome!! Family is added.');
            }
        }
        return $this->render('family/index.html.twig', [
            'form' => $f_form->createView(),
        ]);
    }
上面的代码给了我一个错误: 缺少必需的选项“实体管理器”。

我是symfony的新手,我通过以下方式创建了此功能:

此处AddressType表单嵌入FamilyType,执行此操作时,还需要将“实体管理器”(如有疑问)传递给嵌入的表单类

因此,在您的家庭类型表单课程中

namespace App\Form;

use App\Entity\Family;
use App\Form\AddressType;
use Symfony\Component\Form\AbstractType;
use App\Entity\Vendor;
//for radio buttons
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\Request;
class FamilyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $entityManager = $options['entity_manager'];
        $list = $entityManager->getRepository(Vendor::class)->getNameList();
        $arr = [];
        foreach($list as $key=>$value){
            foreach($value as $k=> $v){
                $arr[$v] = $v;
            }
        }


        $builder
            ->add('name', TextType::class, [
                'attr' => [
                    'placeholder' => 'Enter Name',
                ],
            ])
            ->add('contact', TelType::class, [
                'attr' => [
                    'placeholder' => 'Enter COntact number',
                ],
            ])
            ->add('gender', ChoiceType::class, [
                'choices' => $arr,
                'choices_as_values' => true, 'multiple' => false, 'expanded' => true,
            ]
            )
            ->add('address', AddressType::class, [
                //To get validation error for embeded form
                'constraints' => array(new Assert\Valid()),

            ])
            ->add('favorite_food', ChoiceType::class, [
                'choices'  => $arr,

            ])
            ->add('Save',SubmitType::class,[
                'attr' => [
                    'class' => 'btn btn-success '
                ]
            ])
        ;

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Family::class,
        ]);
        $resolver->setRequired('entity_manager');

    }   
}
->add('address', AddressType::class, [
                //To get validation error for embeded form
                'constraints' => array(new Assert\Valid()),
                'entity_manager' => $options['entity_manager']

            ])
现在,实体管理器选项被传递到表单中。干杯