我在Stackoverflow上看到了类似的问题,但是这些答案对我都不起作用(包括清除缓存,清除PHP操作码缓存系统,取消激活和重新激活扩展)。希望有人可以指出正确的方向。
我正在为扩展程序运行计划的命令。在某些时候,我的命令将需要从MyController类中调用方法test()。
我试图通过继承调用和所有注入方法创建对类的引用,但是无论我尝试哪种方式,我总是遇到相同的问题...:
Call to a member function test() on null
最近,我使用了不推荐使用的注入方法,但是它简化了下面的示例,因此我现在将使用它。 (VendorName和ExtensionName是obvs虚拟名称):
* @var \VendorName\ExtensionName\Controller\MyController
* @inject
*/
protected $mc;
public function myCommand()
{
return $this->mc->test(); //should return true
}
...以及MyController内
public function test()
{
return true;
}
答案 0 :(得分:0)
问题不在于命令类上的注入调用,而在于MyController类上的一些自动生成的代码。似乎Extension Builder可以通过在错误的地方错误地创建@inject行而导致错误。这是它自动创建的代码:
/**
* @var \VendorName\ExtensionKey\Domain\Repository\ExampleRepository
* @inject
*/
protected $importService = null;
/**
* @inject
*/
protected $exampleRepository = null;
...第二个@inject调用会产生错误。应该只是:
/**
* @var \VendorName\ExtensionKey\Domain\Repository\ExampleRepository
* @inject
*/
protected $importService = null;
protected $exampleRepository = null;
不幸的是,调试没有告诉您是哪个类导致了问题,所以我自然认为这是我自己的代码。