在我的 Typo3 插件中,我想让管理员能够从下拉列表中选择一些项目,其内容存储在“设施”数据库中,使用存储库“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。
我尝试过通过其他方法注入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 运行这个函数,它会正确返回。
在 FE 中,您位于 Extbase 上下文中,而后端的挂钩中则不是这种情况。由于 extbase bootstrapping 相当昂贵,我建议您使用 Doctrine DBAL 进行查询并直接获取数据。