bars80081
Новичок
Добрый день,
не могу осилить казалось бы простую вещь в Symfony 4.
Мне в метод класса прилетает переменная, из неё получаю имя класса, который следует запустить. Класс существует, наследует нужный интерфейс, создаётся через new.
Всё работает.
Проблема такова, что в конструкторе у запускаемого класса могут быть перечислены зависимости. Соответственно, при new их надо передавать явно (а классы ведь разные могут быть) или попытаться как-то запустить его через зависимости. В теории, раз уж я в контроллере, то должно было хватить:
однако, имею ошибку:
Однако, документация всё водит за нос и не даёт нужного ответа (видимо, потому что не могу задать нужный вопрос).
Прошу помочь осилить шайтан-машину
не могу осилить казалось бы простую вещь в Symfony 4.
Мне в метод класса прилетает переменная, из неё получаю имя класса, который следует запустить. Класс существует, наследует нужный интерфейс, создаётся через new.
PHP:
public function indexAction($class) {
if(
!empty($class)
&& class_exists($class)
&& in_array(DirectPerformerInterface::class, class_implements($class))
) {
/** @var DirectPerformerInterface $obj */
$obj = new $class;//$this->get($class);
$response = $obj->run();
}
}
Проблема такова, что в конструкторе у запускаемого класса могут быть перечислены зависимости. Соответственно, при new их надо передавать явно (а классы ведь разные могут быть) или попытаться как-то запустить его через зависимости. В теории, раз уж я в контроллере, то должно было хватить:
PHP:
/** @var DirectPerformerInterface $obj */
$obj = $this->get($class);
то же самое, еслиService "имя класса" not found: even though it exists in the app's container, the container inside "***\Controller\DirectPerformerController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session", "templating" and "twig" services. Try using dependency injection instead.
$obj = $this->container->get($class);
. То есть, либо мой класс таки надо заявить как-то более явно, либо сделать через какой другой контейнер.Однако, документация всё водит за нос и не даёт нужного ответа (видимо, потому что не могу задать нужный вопрос).
Прошу помочь осилить шайтан-машину