如何访问Symfony2中Form Builder类中的用户角色


How can i access the user Role in Form Builder class in Symfony2

我的表单为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);