我扩展了ChoiceType以创建RolesType,其目标是提供多个可选择的应用程序自定义角色列表。编辑自己内部的自定义SF3类型
由于我的角色在config.yml定义,我不想通过它为每个RolesType使用,如:
$builder
->add('authorizedRoles', RolesType::class, [
'label' => static::ROOT_TRANSLATION_PATH . ".roles.label",
'multiple' => true,
'expanded' => false,
'roles_list' => $roles,
'attr' => [
'helper' => static::ROOT_TRANSLATION_PATH . ".roles.helper",
]
])
相反,我试图通过初始化注射这种选择名单在角色类型构造角色列表:
public function __construct(array $rolesData) {
$this->rolesData = $rolesData;
foreach($this->rolesData as $roleId => $roleData) {
$this->rolesList[$roleData['label']] = $roleData['key'];
}
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->setAttribute('multiple', true);
$builder->setAttribute('expanded', false);
$builder->setAttribute('choices', $this->rolesList);
$options['multiple'] = true;
$options['expanded'] = false;
$options['choices'] = $this->rolesList;
// 'multiple' => true,
// 'expanded' => false,
// 'choices' => $this->rolesList,
}
public function getParent()
{
return ChoiceType::class;
}
你可以看到我失败attemps 行动的非常形式上。由于我总是想要我的角色,并且我总是希望多个和扩展选项具有相同的值,所以在此处做得更好(恕我直言)。
到目前为止,属性和选项导致失败。 我该如何在建造者(或其他形式的类别)中设置它?
一个类似的例子你已经注册你表单类型服务(声明合适的标签)?你的意思是失败*吗?任何错误? –
是的,我正确地将此表格注册为服务。我只是接受你的回答,在这里我完全忽略了关于configureOption目标的观点。 – nbonniot