2016-03-09 3 views
3

Попытка создать форму, которая позволит мне выбрать роли пользователя, но не работает.FOSUserBundle простая форма редактирования ролей пользователей

Вот мой класс User:

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

Использование hassers/issers, если оно не может найти геттер.

Кроме того, вы должны быть в состоянии исправить эту ошибку, добавив следующий метод в User лица:

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

Заметим, что вы должны добавить следующий конструктор:

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

Очистить кэш , ищите обновленную схему базы данных, и она должна работать.

0

я сделал ту же самую вещь, но я использовал:

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

вместо

parent::getRoles(); 

, потому что я не могу войти в систему, используя последний, но проблема сохраняется, когда я пытаюсь для редактирования моего пользователя в пакете админки сонаты.

Смежные вопросы