Следуя этим инструкциям, я установил Symfony 3.4 с помощью следующей команды.
composer.phar create-project symfony/framework-standard-edition my_project_namephp bin/console help
4
Затем, следуя этим другим инструкциям, я добавлен диспетчер событий в стандартное консольное приложение, а также прослушиватель событий
#File: my_project_namephp bin/console help
4/bin/console
/* ... other code ... */
$application = new Application($kernel);
//START: my new code
//create dispatcher and add to application
use Symfony\Component\EventDispatcher\EventDispatcher;
$dispatcher = new EventDispatcher();
$application->setDispatcher($dispatcher);
//add my event to dispatcher
use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Symfony\Component\Console\ConsoleEvents;
$dispatcher->addListener(ConsoleEvents::COMMAND, function (ConsoleCommandEvent $event) {
exit("\n\nHey, Symfony called my event! Let's crash this party! \n\n");
});
//END: my new code
$application->run($input);
Однако, когда я запускаю консольную команду Symfony,
php bin/console help
мое мероприятие не срабатывает. Я ожидал, что приведенный выше код остановится, когда Symfony вызовет мой ConsoleEvents::COMMAND
слушатель.
Я провел небольшую отладку, и кажется, что вызов $application->run
удалил мое событие из диспетчера ?! Прежде чем я пойду в кроличью нору, выполнив правильный объем отладки, я хотел проверить, есть ли что-нибудь очевидное, что я делаю неправильно, или есть ли известная наука, чтобы исправить это. Есть ли другой способ добавления событий в стандартное консольное приложение Symfony?
$kernel->boot()
, поэтому он не будет работать как есть, поэтому добавьте$kernel->boot()
перед кодом, и он должен работать. - person yceruto   schedule 15.12.2017$kernel->boot(); $dispatcher = $kernel->getContainer()->get('event_dispatcher');
и использовать этот диспетчер вместо ранее созданного, похоже, сработало. Однако оставим вопрос открытым, так как ранняя загрузка вручную кажется немного грязной, и кажется, что должен быть лучший способ сделать это. С удовольствием проголосую за этот формально введенный ответ и отметим его как лучший, если не будет ничего лучше. - person Alan Storm   schedule 15.12.2017