【问题标题】:How can i access the user Role in Form Builder class in Symfony2我如何在 Symfony2 的 Form Builder 类中访问用户角色
【发布时间】:2012-08-13 11:41:29
【问题描述】:

我的表单为UserType,字段如下

->add('description')
  ->add('createdAt')

现在我希望如果登录用户的角色 (ROLE_SUPERADMIN) 然后他可以看到这样的额外字段

 ->add('description')
if($user.hasRole(ROLE_SUPERADMIN))
->add('createdAt')

实际上我必须为许多领域这样做。有什么办法我可以制作一些自定义类型,这样如果存在那种类型,那么只有管理员可以看到类似的内容

->add('createdAt',"MyCustomType")

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    很简单。只需根据安全上下文将自定义表单类型设为服务即可:

    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);
    

    【讨论】:

    猜你喜欢
    • 2014-09-24
    • 2017-01-21
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多