Так как значения параметров используются во время компиляции контейнера, их значение не может быть изменено во время выполнения .
И поскольку роль пользователя может быть известна только во время запроса, то, что вы хотите сделать просто не может быть сделано.
Но, скорее всего, вы подходите к проблеме не с того конца.
Просто заключите лог c в какую-то службу. Упрощенно c пример:
Служба:
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]);
}
}
Это всего лишь пример, но вы можете настроить его в соответствии с вашими потребностями.