Получить каталог проекта по команде symfony 3.4 - PullRequest
0 голосов
/ 15 января 2019

Использование symfony 3.4 В контроллере я могу получить каталог проекта, используя этот метод:

$this->get('kernel')->getProjectDir()

Я хотел бы получить каталог проекта по команде symfony (3.4), как лучше всего это сделать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Уверен, этот вопрос задавался много раз, но мне лень его искать. Плюс Symfony отошел от извлечения параметров / сервисов из контейнера к их внедрению. Поэтому я не уверен, что предыдущие ответы актуальны.

Это довольно легко.

namespace AppBundle\Command;

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Command\Command;

class ProjectDirCommand extends Command
{
    protected static $defaultName = 'app:project-dir';

    private $projectDir;

    public function __construct($projectDir)
    {
        $this->projectDir = $projectDir;
        parent::__construct();
    }
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln('Project Dir ' . $this->projectDir);
    }
}

Поскольку каталог вашего проекта является строкой, autowire не будет знать, какое значение вводить. Вы можете либо явно указать свою команду как службу и вручную ввести значение, либо использовать возможность привязки:

# services.yml or services.yaml
services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false
        bind:
            $projectDir: '%kernel.project_dir%' # matches on constructor argument name
0 голосов
/ 15 января 2019

Ну, я бы сказал, вставьте параметры % kernel.project_dir% или % kernel.root_dir% непосредственно в вашу команду. Нет необходимости делать вашу команду зависимой от службы ядра.

И, кстати, вы также можете сделать так, чтобы ваша команда расширялась Symfony \ Bundle \ FrameworkBundle \ Command \ ContainerAwareCommand , который является абстрактным классом. Таким образом, вы можете получить доступ к контейнеру в вашей команде, просто вызвав метод getContainer .

Но я бы не советовал вам этого на самом деле. Лучше воспользуйтесь autowiring или настройте свой сервис «yaml».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...