Я пытаюсь получить параметры access_control, которые находятся в моем security.yml как массив в моей настраиваемой службе.
Как и при получении параметров role_hierarchy, я думал, что это будет работать со следующим кодом:
$accessParameters = $this->container->getParameter('security.access_control');
К сожалению, это было не так.
Может кто-нибудь сказать, как получить параметры?
access_control
получить параметр access_control
из контейнера.
Это связано с тем, что этот параметр используется только для создания запросов, которые будут зарегистрированы как AccessMap позже, указанные в AccessListener , а затем останутся без регистрации в контейнере.
Вы можете попробовать что-то взломанное, чтобы вернуть этих помощников, получив их как
$context = $this->get("security.firewall.map.context.main")->getContext(); $listener = $context[0][5]; // Do reflection on "map" private member
Но это своего рода уродливое решение.
Еще один способ увидеть, как их получить, – снова проанализировать файл безопасности
use Symfony\Component\Yaml\Yaml; $file = sprintf("%s/config/security.yml", $this->container->getParameter('kernel.root_dir')); $parsed = Yaml::parse(file_get_contents($file)); $access = $parsed['security']['access_control'];
Если вы хотите зарегистрировать эту конфигурацию в службе, вы можете сделать что-то вроде
services.yml
services: acme.config_provider: class: Acme\FooBundle\ConfigProvider arguments: - "%kernel.root_dir%" acme.my_service: class: Acme\FooBundle\MyService arguments: - "@acme.config_provider"
Acme \ FooBundle \ ConfigProvider
use Symfony\Component\Yaml\Yaml; class ConfigProvider { protected $rootDir; public function __construct($rootDir) { $this->rootDir = $rootDir; } public function getConfiguration() { $file = sprintf( "%s/config/security.yml", $this->rootDir ); $parsed = Yaml::parse(file_get_contents($file)); return $parsed['security']['access_control']; } }
Acme \ FooBundle \ MyService
class MyService { protected $provider; public function __construct(ConfigProvider $provider) { $this->provider = $provider; } public function doAction() { $access = $this->provider->getConfiguration(); foreach ($access as $line) { // ... } } }