Typo3在null上调用成员函数

时间:2018-09-12 09:54:43

标签: dependency-injection typo3

我在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;
}

1 个答案:

答案 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;

不幸的是,调试没有告诉您是哪个类导致了问题,所以我自然认为这是我自己的代码。