簡體   English   中英

Symfony2實體表單中的查詢生成器

[英]Query Builder inside Symfony2 Entity Form

現在,我在Symfony中使用實體表單類型的查詢生成器功能遇到問題。

此板上的其他問題並沒有幫助我找到解決方案:
參見: 845629813846970在此處輸入鏈接描述

情況如下:我想添加一個電子郵件地址,以便根據要求發送評分。 評分是Doctor類的子級,它是User的子級(此處使用FOS User Bundle)

所以這是我的代碼:

控制器:

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

我也嘗試過:

  • 將QueryBuild外包到存儲庫類中,然后調用存儲庫類=>遇到相同的錯誤

  • 僅使用Create Query Command =>錯誤,該查詢必須是QueryBuilder的實例

  • 正在閱讀《 Doctrine和Symfony文檔》 ...尚未找到解決方案

實際上,您根本無法呈現表單,因為在創建時會收到該錯誤。

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

createForm()接收的第二個參數標記為mixed 正如錯誤所言,它必須是一個objectarray()或僅僅是null

將行更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM