gpt4 book ai didi

php - 带有参数的 Symfony2 表单 query_builder

转载 作者:行者123 更新时间:2023-12-05 09:23:11 25 4
gpt4 key购买 nike

我有这个错误:

“可捕获的 fatal error :传递给 Intranet\RhBundle\Form\AvatarFormType::Intranet\RhBundle\Form{closure}() 的参数 1 必须是 Intranet\UserBundle\Entity\ImageRepository 的实例,Doctrine 的实例\ORM\EntityRepository 给定,调用在 C:\wamp\www\projet\vendor\symfony\symfony\src\Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader.php 第 56 行,定义在 C:\wamp\www\projet\src\Intranet\RhBundle\Form\AvatarFormType.php 第 24 行”

当我开始搜索时,我发现一个常见的错误是关于存储库中的方法。但也许没关系...

这是我的图片库:

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;

这是我的 Controller :

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()));
}

用户在私有(private)目录下有一些图片,我想选择一个头像。User 和 Image 之间已经存在 ManyToMany 关系,而 User 和 Image 之间已经存在 OneToOne(如我所注意到的)。

我正在尝试构建一个选择列表,其中仅包含具有参数的特定用户的照片。我找到的解决方案都无法有效解决此错误。

我不确定我是否必须使用 use($options) 和 $options['data'] 调用我的函数,但是使用 var_dump 我在 $options['data'] 上看到了我的用户。

编辑:

我带来了一点精确度:ImageReposiroty 好像没找到,虽然可以用。我没有错误消息“找不到类”。但是如果我把 EntityReposirtoy 放在 bug 消失,我有这个 symfony 错误消息:

Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given

但我知道我必须调用 ImageRepository 而不是 EntityRepository...

最佳答案

感谢@R。 Canser Yanbakan 给了我一个例子,我自己解决我的问题!

在我的实体中我有 * @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']);}
)
);
}

正确的createForm是:

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

$user选择用户的头像,query_builder给定的参数数组

关于php - 带有参数的 Symfony2 表单 query_builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23739569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com