EasyAdmin choiceField bug Symfony
EasyAdmin choiceField bug Symfony
我认为 EasyAdmin 3.5.9 中存在错误,但在 GitHub 中创建问题之前,我想听听人们的意见。
在我的用户 CRUD 中,我希望能够编辑默认情况下不显示的用户角色。所以我在 UserCrudController
class:
中这样添加了它
public function configureFields(string $pageName): iterable
{
$roles = [
'User' => 'ROLE_USER',
'Agency' => 'ROLE_AGENCY',
'Admin' => 'ROLE_ADMIN'
];
return [
// ...
ChoiceField::new('roles')
->setChoices($roles)->allowMultipleChoices(),
// ...
];
}
下面是它在 User
实体中的样子:
/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->roles;
$roles[] = 'ROLE_USER';
$roles[] = 'ROLE_AGENCY';
$roles[] = 'ROLE_ADMIN';
return array_unique($roles);
}
public function setRoles(array $roles): self
{
$this->roles = array_values($roles);
return $this;
}
实际上,当我想通过选择这些选项之一来使用 EasyAdmin 编辑用户时,它会将正确的值保存在数据库中。但是当我回到同一个用户编辑它时,所有选择仍然显示在该字段中,就像我之前什么也没做一样。所以它似乎更像是一个显示问题而不是数据保存问题。
这里是一个快速的屏幕记录,以便更好地理解:
https://watch.screencastify.com/v/If9xScwQAFqcbbfGBmza
希望你能帮助我。
您的 UserInterface::getRoles()
正在手动将所有角色添加回已设置的角色。该方法应该只需要以下内容:
public function getRoles(): array
{
return array_unique($this->roles);
}
我认为 EasyAdmin 3.5.9 中存在错误,但在 GitHub 中创建问题之前,我想听听人们的意见。
在我的用户 CRUD 中,我希望能够编辑默认情况下不显示的用户角色。所以我在 UserCrudController
class:
public function configureFields(string $pageName): iterable
{
$roles = [
'User' => 'ROLE_USER',
'Agency' => 'ROLE_AGENCY',
'Admin' => 'ROLE_ADMIN'
];
return [
// ...
ChoiceField::new('roles')
->setChoices($roles)->allowMultipleChoices(),
// ...
];
}
下面是它在 User
实体中的样子:
/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->roles;
$roles[] = 'ROLE_USER';
$roles[] = 'ROLE_AGENCY';
$roles[] = 'ROLE_ADMIN';
return array_unique($roles);
}
public function setRoles(array $roles): self
{
$this->roles = array_values($roles);
return $this;
}
实际上,当我想通过选择这些选项之一来使用 EasyAdmin 编辑用户时,它会将正确的值保存在数据库中。但是当我回到同一个用户编辑它时,所有选择仍然显示在该字段中,就像我之前什么也没做一样。所以它似乎更像是一个显示问题而不是数据保存问题。
这里是一个快速的屏幕记录,以便更好地理解: https://watch.screencastify.com/v/If9xScwQAFqcbbfGBmza
希望你能帮助我。
您的 UserInterface::getRoles()
正在手动将所有角色添加回已设置的角色。该方法应该只需要以下内容:
public function getRoles(): array
{
return array_unique($this->roles);
}