Вызов команды в слушателе

У меня есть довольно сложная команда (написанная не мной) в моем API Symfony для отправки уведомлений, и я хотел бы, чтобы она запускалась каждый раз, когда происходит событие PostPersist.

Для этого я установил прослушиватель, запускаемый событием PostPersist, и эта часть работает отлично. Однако мне не удается запустить команду. Сначала я попытался запустить его, как в контроллере, с помощью следующего фрагмента кода:

$kernel = $this->get('kernel');
$application = new Application($kernel);
$application->setAutoExit(false);

$input = new ArrayInput(array(
    'command' => 'acme:send-notifications',
));
// You can use NullOutput() if you don't need the output
$output = new NullOutput();
$application->run($input, $output);
return new Response("");

но, конечно, это не работает в Listener, так как я не могу получить ядро Поэтому я попытался добавить в сервисы команду:

command.send-notifications:
    class: WD\ApiBundle\Command\SendNotificationsCommand
    tags:
        - { name: 'console.command', command: 'acme:send-notifications' }

а затем назовите это так:

$output = new NullOutput();
$this->sendNotifCommand->execute(null, $output);

но затем я получаю следующее сообщение об ошибке: The container cannot be retrieved as the application instance is not yet set.

Признаюсь, я не совсем понимаю, что это значит. Кроме того, я должен признаться, что эта часть symfony (слушатели, команды) для меня довольно нова, и я даже не знаю, правильно ли я делаю это, или есть лучшая система для отправки уведомлений каждый раз, когда происходит сохранение. в конкретном субъекте ...

Лучшим вариантом было бы поместить код домена, вызываемый в вашей команде, в службу и использовать его. Если вы можете, вы все еще можете ядро ​​в своем слушателе

goto 09.03.2018 15:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
1
345
1

Ответы 1

Никогда не пробовал в слушателе, но вы можете попробовать запустить свою команду с помощью процесса:

$process = new Process("cd " . $this->projectDir . "; php bin/console YOUR_COMMAND_NAME");
$process->start();

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