php - 从命令类获取服务

标签 php symfony command-line-interface

如何从命令类获取服务?我一直在尝试使用ContainerAwareCommand作为我的命令类的父级,然后只使用 $this->getContainer()->get('my_service') ,但是当我在 cli 中运行命令时,出现以下错误:

调用未定义的方法Symfony\Component\Console\Application::getKernel()

里面getContainer() ContainerAwareCommand的方法类。

我运行命令的文件是:

<?php

    require_once __DIR__.'/../vendor/autoload.php';
    require_once __DIR__.'/AppKernel.php';

    use AppBundle\Console\Command\ChangeEmailCommand;
    use Symfony\Component\Console\Application;
    use Symfony\Component\Console\Input\ArgvInput;
    use Symfony\Component\Debug\Debug;

    $input = new ArgvInput();
    $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
    $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';

    if ($debug) {
        Debug::enable();
    }

    $kernel = new AppKernel($env, $debug);
    $application = new Application($kernel);
    $application->add(new ChangeEmailCommand());
    $application->run();

最佳答案

您必须使用 FrameworkBundle 的 Application 而不是 Console 组件。该类扩展了控制台组件中的类,但增加了对内核和容器的认识。您的应用程序版本没有这种意识(因为它是为独立使用而设计的,在 Symfony 上下文之外),导致“方法 getKernel() 不存在”。

所以改变这个:

use Symfony\Component\Console\Application;

致:

use Symfony\Bundle\FrameworkBundle\Console\Application;

顺便说一句,通常您不需要自己创建此文件。您可以在标准版中使用 app/console:https://github.com/symfony/symfony-standard/blob/2.7/app/console当您使用 installer/composer create-project 安装 Symfony 时。

关于php - 从命令类获取服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29806743/

相关文章:

c# - 在 dotnet cli 中添加 DLL 引用

php - WordPress 主题功能在调用时不起作用

php - 需要获取表,以便每一行都有键的主 ID (ZEND)

php - 图片无法从 url 加载

symfony - 如何在我的应用程序中从 Monolog 读取日志?

heroku - 我可以禁用烦人的 heroku cli "submit user experience"提示吗?

php - 在 php 中编辑 odt 文档的库

symfony - 连接 twig 中对象列表的属性值

mysql - Doctrine 不会使用 GROUP BY 自动加载连接关系

sql - 旧的 sequelize 迁移没有运行,如何重新运行它