Как получить корневой путь приложения в консольной команде Symfony 4

У меня есть простое консольное приложение Symfony 4. В методе execute() мне нужно распечатать корневой путь приложения.

Этот $this->getContainer()->get('kernel')->getRootDir() - не работает. Этот $this->get('kernel')->getRootDir(); - не работает. Этот $this->get('parameter_bag')->get('kernel.project_dir'); - не работает.

Как я могу получить корневой путь приложения?

как насчет передачи его явно в консольную команду с помощью symfony.com/blog/…

Robert 27.11.2018 11:43
$this->get('kernel')->getProjectDir()?
MorganFreeFarm 27.11.2018 11:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
2
2 977
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предлагаю не вводить контейнер в команду, а явно передавать параметр в определении службы.

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?

ShahRokh 26.12.2018 07:17

1. Код более читабелен, если посмотреть на зависимости, которые вы + - что делает класс 2. Класс тестируемый, вы можете имитировать зависимости вместо того, чтобы имитировать весь контейнер 3. Внедрение контейнера считается плохой практикой 4. Вы ' будут уведомлены об отсутствующих зависимостях, когда контейнер будет соблюден. 5. Упрощение подсказки типов при использовании $ container-> get ('mailer'). IDE не знает, что это такое, если вы не используете @var Mailer и т. д. Есть гораздо больше «за», использующих прямые зависимости.

Robert 02.01.2019 14:11
You probably forgot to call the parent constructor.
commonpike 02.01.2020 14:44

Другие вопросы по теме