EasyAdmin choiceField bug Symfony

问题描述 投票:0回答:1

我认为 EasyAdmin 3.5.9 中有一个错误,但在 GitHub 中创建问题之前,我想征求人们的意见。

在我的用户 CRUD 中,我希望能够编辑用户角色,默认情况下不会显示该角色。所以我在

UserCrudController
类中添加了它:

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

希望你能帮助我。

php symfony roles easyadmin choicefield
1个回答
0
投票

您的

UserInterface::getRoles()
正在手动将所有角色添加回设置的角色中。该方法应该只需要以下内容:

public function getRoles(): array
{
    return array_unique($this->roles);
}
© www.soinside.com 2019 - 2024. All rights reserved.