我阅读了有关在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 为空
答案 0 :(得分:2)
你忘了调用父构造函数了!
public function __construct() {
parent::__construct();
$this->translator = $this->getContainer()->get('translator');
}
答案 1 :(得分:2)
问题是,当调用configure方法或调用构造函数时,应用程序对象为null。只有在execute方法中才能调用服务,因为在此期间,应用程序对象被填充