gpt4 book ai didi

Symfony:在表单中使用查询构建器

转载 作者:行者123 更新时间:2023-12-04 19:03:17 27 4
gpt4 key购买 nike

我有一个使用 FormBuilder 构建的表单:

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('rosters', 'entity', array(
'class' => 'ReliefAppsPlatformBundle:Roster',
'property' => 'display',
'query_builder' => function(RosterRepository $r) use ($user) {
return $r->createQueryBuilder('r')
->leftJoin('r.members', 'm')
->addSelect('m')
->where('(m.rights = :adminRight or m.rights = :managerRight) and m.user = :user')
->setParameter('adminRight', RosterMember::ADMIN_LEVEL)
->setParameter('managerRight', RosterMember::MANAGER_LEVEL)
->setParameter('user', $user);
},
'required' => true,
'expanded' => true,
'multiple' => true
))
->add('save', 'submit')
;
}

如您所见,我的 QueryBuilder 使用 $user(当前用户)作为参数。
我的 Controller 看起来像这样:
public function createAction(Request $request, Event $event)
{
$alert = new RosterEvent;
$alert->setEvent($event);

$user = $this->getUser();
$form = $this->createForm(new RosterEventType(), $alert, $user);
$form->handleRequest($request);
if ($form->isValid()) { ....

我的问题是我需要将 $user 传递给 formbiulder。但是我得到“可捕获的 fatal error :传递给 Symfony\Bundle\FrameworkBundle\Controller\Controller::createForm() 的参数 3 必须是数组类型,给定的对象,...”
我知道问题是我如何将 $user 从 Controller 传递给表单构建器。但我不知道该怎么做。
有任何想法吗?

最佳答案

documentation 中所述,方法 $options = array() 的第三个参数 ( createForm )需要一个数组而不是一个对象。

这条线错了

$form = $this->createForm(new RosterEventType(), $alert, $user);
$options参数可以用于例如 this
$form = $this->createForm(new TaskType(), $task, array(
'action' => $this->generateUrl('target_route'),
'method' => 'GET',
));

如果你想给表单传递一个参数,你可以尝试像 这样的东西。 this

Controller
$form = $this->createForm(new RosterEventType($user), $alert);

形式
protected $user;

public function __construct (User $user)
{
$this->user = $user;
}

希望它会有所帮助。

关于Symfony:在表单中使用查询构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432371/

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