在Symfony 2中创建命令行:添加私有字段

时间:2013-03-13 13:57:02

标签: symfony command-line

我阅读了有关在Symfony 2中创建命令行的文档。 我想创建一个稍微不同的Command类。实际上,我想将翻译器添加为我班级的私人领域......就像这样:

<?php

namespace myVendor\myBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class ThemeCommand extends ContainerAwareCommand {
private $translator;

public function __construct() {
    $this->translator = $this->getContainer()->get('translator');
}

protected function configure() {
    $this->setName('viewkit:color')
         ->setDescription($this->translator->trans('command.theme.description'))
         ->addArgument('theme', InputArgument::REQUIRED, 'le thème jquery');
}

protected function execute(InputInterface $input, OutputInterface $output) {
    $theme = $input->getArgument('theme');        
    $output->writeln($this->translator->trans('command.theme.success'));
}

}

?>

你可以想象它因为构造函数而无效,我有这个例外:

Call to a member function getKernel() on a non-object in C:\wamp\www\viewkit\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand.php

问题是抽象类 ContainerAwareCommand 中的 getContainer méthod返回可能为null 并且由于此类来自 Command.php 类,问题更具体地是返回非对象的Command.php getApplication 方法(可能为null)..

不知何故,Command.php类的应用程序字段已填满,但由于我的 ThemeCommand 中有我的构造函数,因此存在问题

所以我的问题是: 如何在我的ThemeCommand类中拥有私有字段,并使用完善的构造函数

初始化它们

谢谢


我又试摆脱构造和文档...同样的问题,在做这样的构造函数是没有问题的,但getContainer不Command.php返回一个对象,因为 getApplication 为空

2 个答案:

答案 0 :(得分:2)

你忘了调用父构造函数了!

public function __construct() {
    parent::__construct();
    $this->translator = $this->getContainer()->get('translator');
}

答案 1 :(得分:2)

问题是,当调用configure方法或调用构造函数时,应用程序对象为null。只有在execute方法中才能调用服务,因为在此期间,应用程序对象被填充