我在我的表单中使用实体选择列表.我只想使用特定的实体(例如:只有用户所属的组)因此,在控制器中,我正在获取这些组,并试图将它们传入formBuider.
控制器:
/.../
$groups = $em->getRepository('VendorMyBundle:Group')->getUserGroups($user);
$form = $this->createForm(new Message($groups), $message);
/.../
Run Code Online (Sandbox Code Playgroud)
所以现在怎么办?如何在formBuilder中使用它?如何更改此行以使用传递的组数组?
->add('group','entity',array('class' => 'Vendor\MyBundle\Entity\Group', 'label'=>'Group:'))
Run Code Online (Sandbox Code Playgroud)
或者以另一种方式:
class MessageType
{
/.../
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('group','entity',
array(
'class' => 'Vendor\MyBundle\Entity\Group',
'property' => 'name',
'query_builder' => function ($repository) {
$qb = $repository->createQueryBuilder('group');
$qb->add('where', 'group.administrator = :user');
$qb->setParameter('user', $user->getId());
return $qb;
},
'label' => 'Group'
)
)
// Continue adding fields
;
}
/.../
}
Run Code Online (Sandbox Code Playgroud)
那么如何让对象$ user在表单构建器中使用?($ user表示当前登录的用户)
是否可以动态使用跨过滤器或路径功能?将变量作为参数?EX1:
{{ path('object_edit', { parameter_type : parameter_value }) }}
Run Code Online (Sandbox Code Playgroud)
因为:我不知道"对象"是否使用id或slug进行路由
EX2:
{{message|trans({ parameter_type : parameter_value }, 'TranslationDomain') }}
Run Code Online (Sandbox Code Playgroud)
因为:我不知道它是'%user%'还是'%article%'或其他什么
为什么这样可行:
{{ path('object_edit', { 'id' : parameter_value }) }}
Run Code Online (Sandbox Code Playgroud)
但这不是:
{{ set parameter_type = 'id' }}
{{ path('object_edit', { parameter_type : parameter_value }) }}
Run Code Online (Sandbox Code Playgroud)