首页 > 解决方案 > 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/*'

有任何想法吗?

谢谢

标签: dependency-injectiontypo3extbase

解决方案


看起来您正在混淆 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


推荐阅读