Я выполнил документацию, чтобы переопределить регистрационную форму FosUser, и я покажу роли, которые я хочу, как это. Вот моя регистрационная форма.Как переопределить форму регистра FosUser и выбор полей Поля с ролями SYMFONY2
<?php
namespace My\BlogBundle\Form;
use My\BlogBundle\Entity\User;
use Symfony\Component\Form\FormBuilder;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
class MyRegisterType extends BaseType
{
public function buildForm(FormBuilder $builder, array $options)
{
parent::buildForm($builder ,$options);
$user = new User();
$builder
->add('roles' ,'choice' ,array('choices'=>$user->getRoles()) ;
}
public function getName()
{
return 'my_register_type';
}
}
И вот мое юридическое лицо.
<?php
namespace My\BlogBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* My\BlogBundle\Entity\User
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="My\BlogBundle\Entity\UserRepository")
*/
class User extends BaseUser
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
protected $roles=array();
/**
*@ORM\OneToMany(targetEntity="Article" ,mappedBy="user")
*/
protected $article;
/**
*@ORM\OneToMany(targetEntity="Comment" ,mappedBy="user")
*/
protected $comment;
public function __construct()
{
parent::__construct();
$this->roles=array('searcher' ,'annoucer');
}
}
Моя проблема сейчас я не знаю, как отобразить на этом поле только роли я добавил, потому что я получаю ROLE_USER с выбором также и когда я отправить форму, я получаю эту ошибку
Catchable Fatal Error: Argument 1 passed to FOS\UserBundle\Model\User::setRoles() must be an array, string given, called in /var/www/blog/vendor/symfony/src/Symfony/Component/Form/Util/PropertyPath.php on line 346 and defined in /var/www/blog/vendor/bundles/FOS/UserBundle/Model/User.php line 709
Любая помощь будет более чем оценена, спасибо. BTW Извините, но я не могу добавить другие теги: P
окей спасибо, ребята плохо проверить это, и пусть вы KNO Thanks – kosaidpo
Привет, ребята я тестировал и, к сожалению, это не то, что я хочу, я хочу позволить пользователю выбрать его (тип учетной записи, который его роль sementicly) искатель/аннуитет для работы, любое другое обходное решение ?? спасибо – kosaidpo
Тогда вы должны сохранить свой тип формы, то есть 'ChoiceField', но для этого нужно переопределить класс FOSUserBundle и создать метод с именем' setRole', который получит строку, идентификатор роли, которую вы хотите установить. Затем, добавляя свой тип к своей форме, вместо использования 'role', вы используете' role', а компонент формы будет вызывать 'setRole' с единственным одиночным значением. – Matt