Typo3 8.7.10 Flexform itemsProcFunc,自定义控制器函数,存储库为 NULL

Typo3 8.7.10 Flexform itemsProcFunc, custom controller function, repository is NULL

在我的 Typo3 插件中,我想让管理员能够 select 下拉列表中的一些项目,其内容存储在 "facilities" 数据库中,使用存储库 "FacilitiesRepository.php".

系统默认使用UID作为每一项的值。因此我想使用自定义函数来确保下拉列表中每个项目的标签和值都使用我想要的。

我正在使用 flexform 和 "itemsProcFunc" 标签来调用我的自定义函数。 自定义函数位于名为 "FacilitiesController.php"

的控制器中

控制器使用注入来引用存储库,如下所示:

 /* @var \MyCompany\MyPlugin\Domain\Repository\FacilitiesRepository
 * @inject
 */
 protected $facilitiesRepository;

控制器中的所有函数都成功连接到存储库,所以我知道它可以正常工作。

我正在尝试使用 findAll() 存储库函数。

我的自定义函数已从 flexform 成功调用,但是每当它引用 facilitiesRepository 时都会给我错误:Call to a member function findAll() on null。

我尝试用存储库中的 test() 函数替换 findAll,但我仍然得到:Call to a member function test() on null。

Null 总是 returned。

我尝试过通过其他方法注入 repo(我相信有 3 种方法)但结果是一样的。

这是我的自定义函数:

public function findAllForFlexForm($config){ 

    $categories = $this->facilitiesRepository->findAll();  // <--here is the problem

    // create option list
    $optionList = array();

    foreach($categories as $key=>$item){
        $label = $item['id'];
        $value = $item['titel_de'];

        $optionList[] = array(0 => $label, 1 => $value);
    }

    // return config
    $config['items'] = array_merge($config['items'], $optionList);
    return $config;

}

是否有任何原因导致我的 facilitiesRepository 无法被识别?如果我 运行 来自 FE 的这个函数,它会 return 正确。

在 FE 中,您处于 Extbase 上下文中,而在后端的挂钩中则不是这样。由于 extbase 引导相当昂贵,我建议您使用 Doctrine DBAL 进行查询并直接获取数据。