如何向symfony控制台添加新的命令行选项

Chr*_*mas 3 symfony

我不是Symfony的专家,我需要--country=XX在symfony控制台中添加一个新的控制台选项.

此心不是一个命令,它的一个选项,其改变如何任何命令运行时,通过选择不同的数据库通过构建doctrine.dbal.dbname参数如操作上执行api_fr,api_de,api_es等.

我试图寻找一种方法来做到这一点,但不幸的是一切都回来添加命令,这不是我想要做的,我想添加一个选项.

我正在构建一个API,其中一部分与Symfony 2.8配合使用,另一部分则使用Symfony 3.x. 我想两个版本的答案可能相同,但如果您知道如何在两个版本中执行此操作并且它们是分开的,请告诉我.

小智 7

你可以像这个例子一样添加一个EventListener:

use Symfony\Component\Console\Input\InputOption;

class YourOptionEventListener
{
    public function onConsoleCommand(ConsoleCommandEvent $event)
    {
        $inputDefinition = $event->getCommand()->getApplication()->getDefinition();

        // add the option to the application's input definition
        $inputDefinition->addOption(
            new InputOption('yourOption', null, InputOption::VALUE_OPTIONAL, 'Description of the option', null)
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将其添加为服务:

<?xml version="1.0" ?>
<container ...>
    <services>
        <service id="app_yourOption.console_event_listener"
                 class="App\YourOptionBundle\EventListener\YourOptionEventListener">
            <tag name="kernel.event_listener" event="console.command" method="onConsoleCommand" />
        </service>
    </services>
</container>
Run Code Online (Sandbox Code Playgroud)

您可以查看此文档,在"添加全局命令选项"一章中,您可以找到所需内容:http: //php-and-symfony.matthiasnoback.nl/2013/11/symfony2-add-a-global-option -to-控制台的命令和-生成-PID-文件/