TYPO3 - 调用另一个存储库


TYPO3 - Call another repository

是否可以在不同的控制器中调用函数?我需要在designRepository中调用FindByCategoryGrouped($catId).php并从categoryRepository中调用getCategories($catId).php

public function listAction() {
    $this->settings['flexform']['showCategory'] ? $catId = $this->settings['flexform']['showCategory']:$catId = $this->settings['listView']['showCategory'];
    // print $catId;
    if (!$catId || $this->settings['flexform']['showCategory'] == '-1') {
        $designs = $this->designRepository->findAll(); 
    } else {
        // $designs = $this->designRepository->findByCategory($catId);
        $designs = $this->designRepository->findByCategoryGrouped($catId);  // THIS
        $categories = $this->categoryRepository->getCategories($catId); // THIS
    }
    // indhold forsvinder hvis næste linje slettes
    $this->view->assign('designs', $designs, "L", $GLOBALS['TSFE']->sys_language_uid);
    $this->view->assign('catId', $catId);
    $this->view->assign('categories', $categories);
}

您可以注入每个已安装的extbase扩展的每个存储库。只需将依赖项注入代码添加到控制器即可。根据您的 TYPO3 版本,您可以:

拼写错误3>= 6.0:

/**
 * @var 'Vendor'Extension'Domain'Repository'SomeRepository
 * @inject
 */
protected $someRepository;

请注意,与专用注入方法相比,@inject注释的性能不是很好。因此,如果您需要提高应用程序的性能并在控制器中进行多次注入,则应考虑切换到注入方法:

/**
 * @var 'Vendor'Extension'Domain'Repository'SomeRepository
 */
protected $someRepository;
/**
 * @param 'Vendor'Extension'Domain'Repository'SomeRepository
 */
public function injectSomeRepository('Vendor'Extension'Domain'Repository'SomeRepository $someRepository) {
  $this->someRepository = $someRepository;
}

拼写错误 3 = 4.7:

/**
 * @var Tx_MyExtension_Domain_Repository_SomeRepository
 * @inject
 */
 protected $someRepository;

错别字3 <4.7

/**
 * @var Tx_MyExtension_Domain_Repository_SomeRepository
 */
 protected $someRepository;
/**
 * Inject SomeRepository
 * @param Tx_MyExtension_Domain_Repository_SomeRepository $someRepository
 * @return void
 */
public function injectSomeRepository(Tx_MyExtension_Domain_Repository_SomeRepository $someRepository) {
  $this->someRepository = $someRepository;
}

在任何情况下,您都可以在将存储库注入到的控制器中将 $this->someRepository 及其所有方法一起使用。

编辑:修正错别字。

编辑:添加依赖注入后,您必须清除缓存!