根据用户角色显示特定表单?

时间:2017-09-26 15:39:45

标签: symfony twig fosuserbundle symfony-forms symfony-security

我的问题/问题:

好吧,你可以看到我使用FOSUserBundle,我有2个用户角色,每天和每周。在我的注册表单中,我已经实现了ChoiceType以在它们之间进行选择。现在它做得不够。它只是在创建用户时将TYPES放在我的FormType和数据库中,作为字符串而不是正确的角色。

我的目标是:

在用户选择了他的角色(每天或每周)之后,它会进入数据库。现在是棘手的部分。我希望用户显示特定的表单'你可以看到的角色 - > {%if is_granted(' ROLE_DAILY')%}依此类推......如何将其与用户的角色存档?

简短步骤:

  1. 转到注册表
  2. 选择角色(每日,每周)
  3. 注册提交
  4. 转到显示表单的XY页面
  5. 显示用户角色表单(每日或每周)
  6. 我真的不知道如何将角色放在我的数据库中,然后定义特定的表单......

    这是我的security.yml:

    security:
        .....
        role_hierarchy:
                ROLE_DAILY: [ROLE_DAILY]
                ROLE_WEEKLY: [ROLE_WEEKLY]
    

    这是我的表格(树枝):

                {% if is_granted('ROLE_DAILY') %}
                    {# Show when user is role_daily #}
                    {{ form_start(form) }}
                    {{ form_widget(form) }}
                    {{ form_end(form) }}
                {% endif %}
    
                {% if is_granted('ROLE_WEEKLY') %}
                    {# Show when user is role_weekly #}
                    {{ form_start(form) }}
                    {{ form_widget(form) }}
                    {{ form_end(form) }}
                {% endif %}
    

    这是我的RegistrationFormType:

    class RegistrationFormType extends AbstractType
    {
    
        const TYPES = ['Daily' => 'Daily', 'Weekly' => 'Weekly'];
    
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add(
                'type',
                ChoiceType::class,
                [
                    'label' => false,
                    'required' => true,
                    'multiple' => false,
                    'choices' => self::TYPES,
                    'constraints' => [
                        new NotBlank(),
                    ],
                ]
            );
        }
    
        public function getParent()
        {
            return 'FOS\UserBundle\Form\Type\RegistrationFormType';
        }
    
        public function getBlockPrefix()
        {
            return 'app_user_registration';
        }
    
        // For Symfony 2.x
        public function getName()
        {
            return $this->getBlockPrefix();
        }
    }
    

    这是我的registration_content.html.twig:

           <div class="form-group">
                {{ form_row(form.type, { 'attr': {'class': 'form-control choice-rhythmus'} }) }}
            </div>
    

    这是我的用户实体:

    /**
     * @ORM\Entity
     * @ORM\Table(name="fos_user")
     */
    class User extends BaseUser
    {
    
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
    
        public function __construct()
        {
            parent::__construct();
            // your own logic
        }
    
        /**
         * @ORM\Column(type="string")
         */
        protected $first_name;
        /**
         * @ORM\Column(type="string")
         */
        protected $last_name;
        /**
         * @ORM\Column(type="string")
         */
        protected $company_name;
        /**
         * @ORM\Column(type="string")
         */
        protected $company_address;
        /**
         * @ORM\Column(type="string")
         */
        protected $company_city;
        /**
         * @ORM\Column(type="string")
         */
        protected $company_code;
    
        /**
         * @ORM\Column(type="string")
         */
        protected $company_business;
    
        /**
         * @ORM\Column(type="string", name="type", nullable=false)
         */
        protected $type;
    
        /**
         * @return mixed
         */
        public function getCompanyBusiness()
        {
            return $this->company_business;
        }
    
        /**
         * @param mixed $company_business
         */
        public function setCompanyBusiness($company_business)
        {
            $this->company_business = $company_business;
        }
    
        /**
         * @return mixed
         */
        public function getType()
        {
            return $this->type;
        }
    
        /**
         * @param mixed $type
         */
        public function setType($type)
        {
            $this->type = $type;
        }
    
        /**
         * @return mixed
         */
        public function getCompanyName()
        {
            return $this->company_name;
        }
    
        /**
         * @param mixed $company_name
         */
        public function setCompanyName($company_name)
        {
            $this->company_name = $company_name;
        }
    
        /**
         * @return mixed
         */
        public function getCompanyAddress()
        {
            return $this->company_address;
        }
    
        /**
         * @param mixed $company_address
         */
        public function setCompanyAddress($company_address)
        {
            $this->company_address = $company_address;
        }
    
        /**
         * @return mixed
         */
        public function getCompanyCity()
        {
            return $this->company_city;
        }
    
        /**
         * @param mixed $company_city
         */
        public function setCompanyCity($company_city)
        {
            $this->company_city = $company_city;
        }
    
        /**
         * @return mixed
         */
        public function getCompanyCode()
        {
            return $this->company_code;
        }
    
        /**
         * @param mixed $company_code
         */
        public function setCompanyCode($company_code)
        {
            $this->company_code = $company_code;
        }
    
        /**
         * @return mixed
         */
        public function getFirstName()
        {
            return $this->first_name;
        }
    
        /**
         * @param mixed $first_name
         */
        public function setFirstName($first_name)
        {
            $this->first_name = $first_name;
        }
    
        /**
         * @return mixed
         */
        public function getLastName()
        {
            return $this->last_name;
        }
    
        /**
         * @param mixed $last_name
         */
        public function setLastName($last_name)
        {
            $this->last_name = $last_name;
        }
    }
    

1 个答案:

答案 0 :(得分:0)

哇,我终于解决了我的问题...我只需要添加多个&#39; = true