我的表单为UserType
,字段如下
->add('description')
->add('createdAt')
现在我想如果登录的用户有角色(ROLE_SUPERADMIN)
,那么他可以看到像这个这样的额外字段
->add('description')
if($user.hasRole(ROLE_SUPERADMIN))
->add('createdAt')
事实上,我在很多领域都必须这样做。有没有办法我可以做一些自定义类型,这样如果有这种类型,那么只有管理员才能看到像这样的类型
->add('createdAt',"MyCustomType")
非常简单。根据安全上下文,只需将您的自定义表单类型设置为服务即可:
use Symfony'Component'Security'Core'SecurityContext;
class UserType extends AbstractType
{
private $securityContext;
public function __construct(SecurityContext $securityContext)
{
$this->securityContext = $securityContext;
}
public function buildForm(FormBuilder $builder, array $options)
{
// Current logged user
$user = $this->securityContext->getToken()->getUser();
// Add fields to the builder
}
public function getDefaultOptions(array $options)
{
return array(
'required' => false,
'data_class' => 'Acme'HelloBundle'Entity'User'
);
}
public function getName()
{
return 'user_type';
}
}
然后用特殊标签form.type
:将类标记为服务
services:
form.type.user:
class: Acme'HelloBundle'Form'Type'UserType
arguments: ["@security.context"]
tags:
- { name: form.type, alias: user_type }
在您的控制器中,不执行new UserType()
,而是从容器获取服务:
$form = $this->createForm($this->get('form.type.user'), $data);