0

在我的 Typo3 插件中,我想让管理员能够从下拉列表中选择一些项目,其内容存储在“设施”数据库中,使用存储库“FacilitiesRepository.php”。

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

我正在使用 flexform 和“itemsProcFunc”标签来调用我的自定义函数。自定义函数位于名为“FacilitiesController.php”的控制器中

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

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

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

我正在尝试使用 findAll() 存储库功能。

我的自定义函数已从 flexform 成功调用,但是每当它引用设施存储库时,它都会给我错误:调用 null 上的成员函数 findAll()。

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

始终返回 Null。

我曾尝试通过其他方法注入 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;

}

是否有任何原因无法识别我的设施存储库?如果我从 FE 运行此函数,它将正确返回。

4

1 回答 1

2

在 FE 中,您在 Extbase 上下文中,而在后端的钩子中并非如此。由于 extbase 引导相当昂贵,我建议您使用 Doctrine DBAL 进行查询并直接获取数据。

于 2018-10-16T09:11:56.020 回答