dependency-injection - TYPO3 10:错误:调用成员函数 findByUid()
问题描述
我更新了控制器中的依赖注入,现在看起来像这样:
class MyExtensionController extends ActionControlelr
{
/**
* @ var MyExtensionRepository
/**
protected $myRepository
..
..
..
但是像这样在下一个函数中调用存储库
public function indexAction()
{
// get needed info
/** @var Category $category */
$category = $this->myRepository->findByUid($this->settings['flexForm']['categoryId']);
返回错误:
Error: Call to a member function findByUid() on null
Services.yaml 看起来像这样:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
REP\MyExtension\:
resource: '../Classes/*'
有任何想法吗?
谢谢
解决方案
看起来您正在混淆 TYPO3 和 Symphony。除了 Services.yaml 之外的所有内容看起来都像 TYPO3。
在 TYPO3 控制器中,您必须注入存储库。您可以通过使用变量声明旁边的 @inject 注释来做到这一点。您还应该在那里使用完整的命名空间。然后你必须清除所有缓存,它应该可以工作。
这仅适用于低于 9 的 TYPO3 版本
请修复您的整个评论部分。
/**
* @var \Full\Path\To\Repository\MyExtensionRepository
* @inject
*/
protected $myRepository
对于版本 9 及更高版本,请使用新的依赖注入https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/9.0/Feature-82869-ReplaceInjectWithTYPO3CMSExtbaseAnnotationInject.html
推荐阅读
- javascript - 赛普拉斯:如何模拟键盘(CTRL/SHIFT)动作
- python - 在不和谐重写 cog 中使用检查
- npm - NPM 初始化和启动
- docker - 大文件的最佳 kubernetes 存储选项
- php - Laravel 忽略 env 和 config 文件
- xamarin.forms - 在 Xamarin.Forms 中使用 MailKit 发送电子邮件时出现 System.MissingMethodException
- azure - Azure 是否解释了资源的 API 版本更新?
- c - 单个 malloc 中的多个结构调用未定义的行为?
- php - 为什么我的弹性搜索有问题,无法搜索某些东西?
- python - 在 imputer 之后添加删除的列