Symfony2实体表单

时间:2015-07-19 19:29:57

标签: php symfony doctrine-orm symfony-forms doctrine-query

现在我在Symfony中的实体表单类型的查询构建器功能有问题。

该委员会的其他问题无助于我找到解决方案:
请参阅例如:845629813846970enter link description here

以下情况:我想添加一个电子邮件地址,以便根据要求发送评分。评级是Doctor类的子级,是User的子级(此处使用FOS用户分发包)

所以这是我的代码:

控制器:

public function AddPatientAction()
{
    $user = $this->getUser();
    $form = $this->createForm(new AddPremiumRatingType(), '', array('user'=> $user));
    return $this->render('Acme/DemoBundle:Dashboard/Premium:addpatient.html.twig', array(
                    'form' => $form
                ));
}

这是AddPremiumRatingType类:

class AddPremiumRatingType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder
            ->add('doctor', 'entity', array(
                'label' => 'Arztprofil',
                'required' => true,
                'class' => 'JBauleRatingBundle:Doctor',
                'mapped' => false,
                'property' => 'name',
                'query_builder' => function(DoctorRepository $er) use ($options) {
                    $user = $options['user'];
                    return $er->createQueryBuilder('d')
                                ->select('d')
                                ->where('d.user = ?1')
                                ->setParameter('1', $user->getId());
             }))
            ->add('emails', 'collection', array(
                'label' => 'E-Mail Adressen',
                'type'   => 'email',
                'mapped' => false,
                'delete_empty' => true,
                'allow_add' => true,
                'allow_delete' => true,
                'prototype' => true,
                'prototype_name' => '__name__',
                'options' => array(
                    'label' => 'E-Mail Adresse',
                    'attr' => array('class' => 'form-control'),
                    'required' => false
                )
            )) 
            ->add('save', 'submit', array(
                'label'     => 'Patienten hinzufügen'
            ));                  
    }

    public function getName()
    {
        return 'rating';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Acme\DemoBundle\Entity\PremiumRating',
        ));
        $resolver->setRequired(array(
            'user',
        ));
        $resolver->setAllowedTypes(array(
            'user' => 'Acme\LoginChildBundle\Entity\User',
        ));
    }

}

最后,我得到了错误:

Expected argument of type "object, array or empty", "string" given

我也试过了:

  • 在Repository Class中外包QueryBuild并调用repository class =>得到了相同的错误

  • 仅使用创建查询命令=>查询必须是QueryBuilder的实例

  • 时出错
  • 阅读Doctrine和Symfony的文档......还没有找到解决方案

1 个答案:

答案 0 :(得分:2)

实际上,您根本无法渲染表单,因为您在创建时收到了该错误。

$form = $this->createForm(new AddPremiumRatingType(), '', array('user'=> $user));

createForm()收到的第二个参数标记为mixed。正如错误所述,它必须是objectarray()或只是null

将您的行更改为:

$form = $this->createForm(new AddPremiumRatingType(), array(), array('user'=> $user));
相关问题