如何在symfony中收听控制台事件?

如何在symfony中收听控制台事件?,symfony,Symfony,我试图用symfony标准版(2.3)连接symfony控制台事件,但它就是不起作用 我根据他们的想法创建了一个侦听器,并遵循以下步骤: 但是很明显,标签是不正确的,我找不到正确的名字。我该怎么做呢?所以,我终于得到了它。原始帖子中的上述代码完全有效,但我在bundle中定义了my services.yml,而不是在application configapp/config.yml中。这意味着从未加载配置。我必须通过容器扩展导入配置: # Acme/DemoBundle/DependencyInj

我试图用symfony标准版(2.3)连接symfony控制台事件,但它就是不起作用

我根据他们的想法创建了一个侦听器,并遵循以下步骤:


但是很明显,标签是不正确的,我找不到正确的名字。我该怎么做呢?

所以,我终于得到了它。原始帖子中的上述代码完全有效,但我在bundle中定义了my services.yml,而不是在application config
app/config.yml
中。这意味着从未加载配置。我必须通过容器扩展导入配置:

# Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
namespace Acme\DemoBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

class AcmeDemoExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
}


虽然我想你甚至可以省略
$configuration=newconfiguration()部分和
配置
类。

您的
标记
事件侦听器名称必须是
控制台。事件侦听器
。它帮助我解决了这个问题

services:
    kernel.listener.command_dispatch:
        class: Acme\DemoBundle\EventListener\AcmeCommandListener
        tags:
            - { name: console.event_listener, event: console.command }
Platform\EventListener\Console\InitListener:
标签:
-{name:kernel.event_侦听器,事件:console.command,优先级:1024}

您使用的是
php应用程序/console
还是自定义应用程序?我使用的是Symfony标准版,希望在执行
app/console
命令之前添加事件触发。我已经在symfony google小组中询问过了,有人说我需要使用一个服务来配置它(正如我在上面尝试的那样)。谢谢你的标签
# Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
namespace Acme\DemoBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

class AcmeDemoExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
}
# Acme/DemoBundle/DependencyInjection/Configuration.php
namespace Acme\DemoBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('headwork_legacy');
        return $treeBuilder;
    }
}
services:
    kernel.listener.command_dispatch:
        class: Acme\DemoBundle\EventListener\AcmeCommandListener
        tags:
            - { name: console.event_listener, event: console.command }
Platform\EventListener\Console\InitListener:
    tags:
        - { name: kernel.event_listener, event: console.command, priority: 1024 }

<?php 
class CustomListener
{
    public function onConsoleCommand(ConsoleCommandEvent $event): void
    {
        //do somehting
    }
}

?>