我有一个使用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(当前用户)作为参数。 我的控制器看起来像那样:
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。但我得到“可捕获致命错误:参数3传递给Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller :: createForm()必须是类型数组,给定对象,......” 我知道问题是我如何将$ user从控制器传递给formbuilder。但我不知道该怎么做。 有什么想法吗?
答案 0 :(得分:3)
正如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
的内容控制器的
$form = $this->createForm(new RosterEventType($user), $alert);
表格的
protected $user;
public function __construct (User $user)
{
$this->user = $user;
}
希望它会有所帮助。