如何向symfony控制台

时间:2016-11-18 10:32:57

标签: symfony

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

这不是一个命令,它是一个更改命令运行方式的选项,通过选择一个不同的数据库来执行,通过构建doctrine.dbal.dbname参数来执行,例如api_frapi_deapi_es等。

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

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

2 个答案:

答案 0 :(得分:6)

您可以像这样的例子添加一个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)
        );
    }
}

然后将其添加为服务:

<?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>

您可以查看此文档,在“添加全局命令选项”一章中,您可以找到所需内容: http://php-and-symfony.matthiasnoback.nl/2013/11/symfony2-add-a-global-option-to-console-commands-and-generate-pid-file/

答案 1 :(得分:1)

2018和Symfony 3 + 的最佳实践是扩展Symfony应用程序:

<?php

use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputOption;

final class SomeApplication extends Application
{
    protected function getDefaultInputDefinition()
    {
        $definition = parent::getDefaultInputDefinition();
        $definition->addOption(new InputOption(
            'country',
            null,
            InputOption::VALUE_REQUIRED,
            'Country to use'
        ));

        return $definition;
    }
}

然后在存在Symfony\Component\Console\Input\InputInterace服务的命令或服务中的任何位置,只需调用:

$country = $input->getOption('country');


您想了解更多吗?

我在4 Ways to Add Global Option or Argument to Symfony Console Application帖子中扩展了答案