Symfony2 form query_builder 有参数

我有这个错误 :

"被称为致命错误:参数 1, 传输 Intranet\RhBundle\Form\AvatarFormType::Intranet\RhBundle\Form{closure} //, 必须是标本 Intranet\UserBundle\Entity\ImageRepository, 复制 Doctrine\ORM\EntityRepository given, 由B引起的。 C:\wamp\www\projet\vendor\symfony\symfony\src\Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader.php 排队 56 并在字符串中定义 24

C:\wamp\www\projet\src\Intranet\RhBundle\Form\AvatarFormType.php"

当我开始查找时,我在存储库中的方法中发现了常见错误。
但也许一切都是如下......

这是我的 ImageRepository :


public function getImageUser/User $user/
{
$qb = $this->createQueryBuilder/'i'/
->where/'i.user = :user '/
->setParameter/'user', $user/;

// Et on retourne simplement le QueryBuilder, et non la Query
return $qb;


}

这是我的
AvatarFormType

:


/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm/FormBuilderInterface $builder, array $options/
{
//die/var_dump/$options['data']//;
$builder
->add/'avatar', 'entity', array/
'class' => 'IntranetUserBundle:Image',
'property' => 'alt',
'query_builder' => function/ImageRepository $r/ use/$options/ {
return $r->getImageUser/$options['user']/;}
/
/;
}


态度 :


/**
* @ORM\OneToOne/targetEntity="Intranet\UserBundle\Entity\Image", cascade={"persist", "remove"}/
* @Assert\Valid//
*/
private $avatar;


这是我的控制器 :


public function imagesDeAction/Request $request, User $user/ {
$form = $this->createForm/new AvatarFormType//, $user, array/'user' => $user//;
$images = $this->getDoctrine//
->getRepository/'IntranetUserBundle:Image'/
->findByUser/$user/;
if /$request->getMethod// == 'POST'/ {
$form->handleRequest/$request/;
if /$form->isValid/// {
$em = $this->getDoctrine//->getManager//;
$user->setAvatar/$request->avatar/;;
$em->persist/$user/;
$em->flush//;
}

}
$avatar = $user->getAvatar//;
return $this->render/'IntranetRhBundle:Image:imagesDe.html.twig',array/'user' => $user,'images' => $images, 'form' => $form->createView////;
}


用户在个人目录中有几张照片,我想选择一个头像。
已经存在态度 ManyToMany 用户和图像之间和 OneToOne /我注意到了/ 在用户和图像之间。

我正在尝试使用具有此参数的特定用户的PC构建选择列表。 我发现的任何解决方案都没有对解决此错误无效。

我不确定我需要用我的功能打电话 use/$options/ 和 $options['data'], 但是 var_dump 我看到了我的用户 $options['data'].

EDIT :

我引用了一点准确性 :
ImageReposiroty, 虽然使用似乎没有找到。 我没有错误消息 "class not found".
但如果我放了 EntityReposirtoy, 错误会消失,我将有此错误消息 symfony :

预期类型论证 "Doctrine\ORM\QueryBuilder", "array" 放

但我知道要打电话 ImageRepository, 但不是 EntityRepository...
已邀请:

八刀丁二

赞同来自:

谢 @R. Kaneru Yantbakan给了我一个例子,我自己决定了我的问题 !

在我的本质上,我有 * @ORM\Entity, 但是使用 reposiroty 我必须打电话给她 :


* @ORM\Entity/repositoryClass="Intranet\UserBundle\Entity\ImageRepository"/


正确的 BuildForm 是一个 :


/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm/FormBuilderInterface $builder, array $options/
{
$builder
->add/'avatar', 'entity', array/
'class' => 'IntranetUserBundle:Image',
'property' => 'alt' ,
'query_builder' => function/ImageRepository $r/ use/$options/ {
return $r->getImagesUser/$options['user']/;}
/
/;
}


和 rigth 创建是 :


$form = $this->createForm/new AvatarFormType//, $user, array/'user' => $user//;


$user 选择用户的化身和用于指定参数的数组 query_builder

董宝中

赞同来自:

化身形式的类型预期 data_class 它应该是 Intranet\UserBundle\Entity\Image. 但是你给出了一个用户实体表格。 您必须将此用户变量作为一种选项。


$form = $this->createForm/new AvatarFormType//, new Image//, array/'user_id' => $user->getId///;


而不是改变自己的 setDefaults 在


public function setDefaultOptions/OptionsResolverInterface $resolver/
{
$resolver->setDefaults/array/'data_class' => 'Intranet\UserBundle\Entity\Image', 'user_id = false //;
}


你能得到什么变量 user_id 通过以下方式:


'query_builder' => function/ImageRepository $r/ use/$options/ {
return $r->getImageUser/$options['user_id']/;
}/

要回复问题请先登录注册