У меня есть простое консольное приложение Symfony 4.
В методе execute() мне нужно распечатать корневой путь приложения.
Этот $this->getContainer()->get('kernel')->getRootDir() - не работает.
Этот $this->get('kernel')->getRootDir(); - не работает.
Этот $this->get('parameter_bag')->get('kernel.project_dir'); - не работает.
Как я могу получить корневой путь приложения?
$this->get('kernel')->getProjectDir()?






Я предлагаю не вводить контейнер в команду, а явно передавать параметр в определении службы.
src / Команда
class YourCommand extends Command
{
private $path;
public function __construct(string $path)
{
$this->path = $path;
}
public function (InputInterface $input, OutputInterface $output)
{
echo $this->path;
}
}
config / services.yaml
services:
# ...
App\Command\YourCommand:
arguments:
$path: '%kernel.project_dir%'
почему вы предлагаете не вводить контейнер в команду symfony?
1. Код более читабелен, если посмотреть на зависимости, которые вы + - что делает класс 2. Класс тестируемый, вы можете имитировать зависимости вместо того, чтобы имитировать весь контейнер 3. Внедрение контейнера считается плохой практикой 4. Вы ' будут уведомлены об отсутствующих зависимостях, когда контейнер будет соблюден. 5. Упрощение подсказки типов при использовании $ container-> get ('mailer'). IDE не знает, что это такое, если вы не используете @var Mailer и т. д. Есть гораздо больше «за», использующих прямые зависимости.
You probably forgot to call the parent constructor.
как насчет передачи его явно в консольную команду с помощью symfony.com/blog/…