Symfony2在向表单下拉传递数据时遇到麻烦


Symfony2 trouble passing data into form dropdown

我正在学习交响乐,我已经被这道题困了好几个小时了。我试图从FOSuserbundle获得userid到我自己的表单下拉。但无法成功……我做了一些错误的__construct函数我猜…下面是代码

ShiftType.php :

class ShiftType extends AbstractType
{
    protected $users;
        public function __construct (User $users)
        {
            $this->users = $users;
        }
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $user = $this->user;
        $builder
            ->add('date', 'date', array(
                'label' => 'Shift Date',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('site_name', 'text', array(
                'label' => 'Site Name',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('location', 'text', array(
                'label' => 'Site Location',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('startTime', 'time', array(
                'label' => 'Start time',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('endTime', 'time', array(
                'label' => 'End time',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('employee', 'button', array(
                'class' => 'UserBundle:user',
                'label' => 'Select Employee',
                'attr' => array(
                    'data-toggle' => 'dropdown',
                    'class' => 'form-control btn btn-default dropdown-toggle',
                    'query_builder' => function(EntityRepository $er) use ($users) {
                            return $er->createQueryBuilder('pp')
                                ->where("pp.username = :username")
                                ->orderBy('pp.index', 'ASC')
                                ->setParameter('users', $users)
                            ;
                        },
                )
            ))

            ->add('save', 'submit', array(
                'attr' => array(
                    'class' => 'btn btn-lg btn-primary'
                )
            ));
    }
    public function getName()
    {
        return 'shifts';
    }
}

我对我的QueryBuilder函数也有疑问。我的做法是否正确。

这是我的控制器:

public function shiftAction(Request $request)
    {
        $shift = new Shifts();
        $em = $this->getDoctrine()->getManager();
        $users = new User;
        $users = $em->getRepository('UserBundle:User')
                ->findAll();
        //var_dump($users);
        $form = $this->createForm(new ShiftType($users), $shift);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em->persist($shift);
            $em->flush();
            return $this->redirect($this->generateUrl('allshifts'));
        }
        return $this->render('XYZFirstBundle:Default:shifts.html.twig', array(
                'shiftForm' => $form->createView(),
            ));
    }   

我总是得到这个错误

contextroreexception: Catchable致命错误:参数1传递给XYZ'FirstBundle'Form'Type'ShiftType::__construct()必须是的实例XYZ'FirstBundle'Form'Type'User,数组给定,调用/var/www/html/learnsymfony/src/XYZ/FirstBundle/Controller/DefaultController.php第33行定义为/var/www/html/learnsymfony/src/XYZ/FirstBundle/Form/Type/shiftttype .php第12行

public function __construct (User $users)

这一行表明__construct函数期望将User对象传递给它,但在控制器中,您传递了一个数组

$users = $em->getRepository('UserBundle:User')->findAll(); // array of User objects
$form = $this->createForm(new ShiftType($users), $shift);

函数API: http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.EntityRepository.html#_findAll