【发布时间】:2018-09-12 09:54:43
【问题描述】:
我在 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;
}
【问题讨论】:
-
您在更改代码后是否刷新了系统缓存?尝试注入整个控制器看起来很奇怪。相反,您应该将相关代码移动到服务或类似的地方,并在两个位置都使用它。
-
是的,所有缓存都清除了,包括安装工具 php 缓存。我想做的就是从另一个类中调用一个函数。扩展生成器告诉我像显示的那样使用注入。 Typo3 文档告诉我有 3 种使用注入的方法(所有这些方法都给出相同的错误)。其他人说根本不要使用注入,而是创建一个我也尝试过的类的实例,但有同样的问题。如果您有更好的方法,请告诉我,我也会尝试。
-
一般来说注入应该是有效的,如果没有更多的代码,很难说哪里出了问题。如果你只是在 myCommand 中创建一个类的实例,我猜它正在工作? (以确保它不是自动加载/类名问题)。它是什么类型的命令,它是否扩展了基于 extbase 的命令?依赖注入仅适用于通过对象管理器实例化的类(即在 extbase 上下文中)。
-
什么样的对象包含你的“myCommand”函数?仅当您的对象被另一个 Extbase 对象使用 ObjectManager->get() 调用时,注入才有效
标签: dependency-injection typo3