【问题标题】:FOSUserBundle simple User roles editing formFOSUserBundle 简单的用户角色编辑表单
【发布时间】:2016-03-09 18:30:23
【问题描述】:

试图创建一个允许我选择用户角色的表单,但它不起作用。

这是我的用户类:

namespace TestBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="TestBundle\Repository\UserRepository")
 */
class User extends BaseUser
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }
}

这是我的表单定义:

class ChangeUserRolesType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $permissions = array(
             'ROLE_USER'        => 'First role',
             'ROLE_CONSULT'     => 'Second role',
             'ROLE_SUPER_ADMIN' => 'Third role'
         );

        $builder
            ->add('username', EntityType::class, array(
                'class' => 'TestBundle:User',
                'choice_label' => 'username'
            ))
            ->add(
                'roles',
                ChoiceType::class,
                array(
                    'label'   => 'Roles',
                    'choices' => $permissions,
                    'multiple' => true,
                    'expanded' => true
                )
            )
            ->add(
                'save',
                SubmitType::class
            );

    }


    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'TestBundle\Entity\User',
        ));
    }

}

这是我创建表单的控制器操作:

/**
 * @Route("/")
 */
public function indexAction()
{
    $users = $this->getDoctrine()->getRepository('TestBundle:User')->findAll();

    $user = $this->getDoctrine()->getRepository('TestBundle:User')->findOneBy(array('username' => 'liviu'));

    $editUserForm = $this->createForm('TestBundle\Form\ChangeUserRolesType', $user);


    return $this->render('TestBundle:Default:index.html.twig', array(
        'users' => $users,
        'form' => $editUserForm->createView()
    ));
}

但我收到此错误:

警告:FOS\UserBundle\Model\User::hasRole() 缺少参数 1, 叫进来 /home/liviu/apps/app1/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php 在第 416 行并定义了 500 Internal Server Error - 上下文错误异常

有谁知道发生了什么?我在 Symfony 3.0 上。*

【问题讨论】:

    标签: php forms fosuserbundle symfony


    【解决方案1】:

    PropertyAccess 如果找不到 getter,则使用 hassers/issers。

    此外,您应该能够通过在 User 实体中添加以下方法来修复此错误:

    public function getRoles()
    {
        parent::getRoles();
    }
    

    请注意,您应该添加以下构造函数:

    public function __construct()
    {
        parent::__construct();
    }
    

    清除缓存,查找更新您的数据库架构,它应该可以工作。

    【讨论】:

      【解决方案2】:

      我做了完全相同的事情,但我使用了:

      return $this->roles->toArray();
      

      而不是

      parent::getRoles(); 
      

      因为我无法使用最后一个登录,但是当我尝试在奏鸣曲管理包中编辑我的用户时问题仍然存在。

      【讨论】:

        猜你喜欢
        • 2013-08-05
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 2015-05-18
        • 1970-01-01
        相关资源
        最近更新 更多