我有一個擁有getRoles方法的用戶實體。但是,要得到這個工作,getRoles()必須返回一個數組,像這樣:在Symfony中只有一個角色的用戶
class User implements UserInterface {
...
public function getRoles()
{
return array($this->roles);
}
...
}
當我試圖做一個表單來創建新用戶的問題就來了。這是因爲每個用戶只能有一個角色,所以,我創建了一個領域是這樣的:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
...
->add('roles', ChoiceType::class, array(
'choices' => array(
'Role 1' => 'ROLE_ONE',
'Role 2' => 'ROLE_TWO',
'Role 3' => 'ROLE_THREE',
'Role 4' => 'ROLE_FOUR'
),
'label' => 'Role')
)
...
但是,當我嘗試呈現它,它拋出我的錯誤:「注意:數組字符串轉換」,這是因爲使用ChoiceType,我只能選擇一個選項。這個問題是用選項修復的:
'multiple' => true
但是這允許選擇多個選項(它不是我想要的)。
我嘗試返回剛纔的角色,而不是一個數組:
class User implements UserInterface {
...
public function getRoles()
{
return $this->roles;
}
...
}
這樣,形式現在的工作,但在登錄停止工作,並告訴我下:
Catchable Fatal Error: Argument 4 passed to Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct() must be of the type array, string given...
的我的應用程序的邏輯是用戶只有一個角色,我不需要數組,但我不知道如何告訴symfony(在登錄時)「角色」只是一個(字符串)而不是更多(陣列)...
對不起,我的英語。
謝謝!但ChoiceType仍然給我錯誤:'「注意:數組到字符串轉換」'。問題是,getRoles()返回數組... – WeirdestBoy
你應該映射' - > add('role',',not' - > add('roles',' – Federkun
否則你可以使用[Data transformer]( http://symfony.com/doc/current/cookbook/form/data_transformers.html) – Federkun