2016-03-09 82 views
3

試圖創建一個表單,允許我選擇用戶角色但它不起作用。FOSUserBundle簡單用戶角色編輯表單

這裏是我的用戶等級:

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

但我我得到這個錯誤:

Warning: Missing argument 1 for FOS\UserBundle\Model\User::hasRole(), called in /home/liviu/apps/app1/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php on line 416 and defined 500 Internal Server Error - ContextErrorException

沒有人知道發生了什麼事嗎?我在Symfony 3.0上。*

回答

1

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

另外,你應該能夠在您的User實體添加以下方法來解決此錯誤:

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

請注意,您應該添加下面的構造:

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

清除緩存,尋找更新你的數據庫模式,它應該工作。

0

我做同樣的事情,但我用:

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

,而不是

parent::getRoles(); 

,因爲我可以在使用最後一個沒有登陸,但是當我試圖問題仍然存在在奏鳴曲管理包中編輯我的用戶。