在我的Typo3插件中,我希望管理员可以使用存储库“ FacilitiesRepository.php”从下拉菜单中选择某些项目,这些项目的内容存储在“ facilities”数据库中。
默认情况下,系统使用UID作为每个项目的值。因此,我想使用自定义函数来确保下拉菜单中每个项目的标签和值都使用我想要的内容。
我正在使用flexform和“ itemsProcFunc”标签来调用我的自定义函数。 自定义函数位于名为“ FacilitiesController.php”的控制器中
控制器使用注入来引用存储库,如下所示:
/* @var \MyCompany\MyPlugin\Domain\Repository\FacilitiesRepository
* @inject
*/
protected $facilitiesRepository;
控制器中的所有功能均已成功连接到存储库,因此我知道它可以正常工作。
我正在尝试使用findAll()存储库功能。
我的自定义函数已成功从flexform调用,但是,只要引用了FacilitiesRepository,就会给我一个错误:调用成员函数findAll()为null。
我尝试在存储库中用test()函数替换findAll,但仍然得到:在null上调用成员函数test()。
总是返回Null。
我试图通过其他方法注入回购协议(我相信有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运行此函数,它将正确返回。
答案 0 :(得分:2)
在FE中,您处于Extbase上下文中,而在后端的钩子中则不是如此。由于extbase引导相当昂贵,因此我建议您使用Doctrine DBAL进行查询并直接获取数据。