在我的 Typo3 插件中,我想让管理员能够从下拉列表中选择一些项目,其内容存储在"设施"数据库中,使用存储库"设施存储库.php"。
默认情况下,系统使用 UID 作为每个项的值。因此,我想使用自定义函数来确保下拉列表中每个项目的标签和值都使用我想要的。
我正在使用弹性表单和"itemsProcFunc"标签来调用我的自定义函数。 自定义函数位于名为"设施控制器.php"的控制器中
控制器使用 inject 来引用存储库,如下所示:
/* @var MyCompanyMyPluginDomainRepositoryFacilitiesRepository
* @inject
*/
protected $facilitiesRepository;
控制器中的所有功能都成功连接到存储库,因此我知道它可以工作。
我正在尝试使用 findAll(( 存储库函数。
我的自定义函数从弹性表单成功调用,但是每当它引用 facilityRepository 时,它都会给我错误:在 null 上调用成员函数 findAll((。
我尝试将 findAll 替换为存储库中的 test(( 函数,但我仍然得到:在 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 运行此函数,它将正确返回。
在 FE 中,您处于 Extbase 上下文中,而在后端的钩子中并非如此。由于扩展基础引导相当昂贵,我建议您使用Doctrine DBAL进行查询并直接获取数据。