如何根据 Symfony 中的用户角色加载具有不同值的参数?

How to load parameters with different values based on user role in Symfony?

我在 parameters.yml 文件中有很多参数,每个参数都应该根据登录用户的角色具有不同的值。

有没有办法根据登录用户的角色系统地决定和加载正确的值?

示例:

parameters:
    user.address_code
    manager.address_code

理想情况下,我不想在使用 address_code.

之前在代码中为 manageruser 添加条件

由于在容器编译期间使用参数值,它们的值不能在运行时更改

而且由于用户角色只能在请求时知道,所以你想做的事情根本做不到。

但是您很有可能是从错误的角度来解决问题的。

只需将逻辑封装在某种服务中即可。一个简单的例子:

服务:

namespace App\Service;

class FooService
{

    private array $configuration;

    public function __construct(array $configuration)
    {
        $this->configuration = $configuration;
    }

    public function getAddressCodeFor(string $role): string
    {
        return $this->configuration[$role] ?? '';
    }
}

您的参数:

# services.yaml
parameters:
    address_code:
        ROLE_USER: 'foo'
        ROLE_ADMIN: 'bar'

确保服务了解您的参数的配置:

#services.yaml

App\Service\FooService:
    arguments: ['%address_code%']    

那么只需要在需要这些值的地方注入FooService,然后在需要的地方调用getAddressCodeFor($role)即可:

class FakeController extends AbstractController
{

    private FooService $paramService;

    public function __construct(FooService $service)
    {
        $this->paramService = $service;
    }

    public function someAction(): Response
    {
        $address_code = $this->paramService->getAddressCodeFor('ROLE_ADMIN');

        return $this->json(['address_code' => $address_code]);
    }

}

这只是一个示例,但您可以根据需要进行调整。