TYPO3 - 调用另一个存储库

5

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

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);
}
1个回答

23

您可以注入每个已安装的Extbase扩展程序的每个存储库。只需将依赖注入代码添加到您的控制器中。根据您的TYPO3版本,它可能是:

TYPO3 >= 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;
}

TYPO3 = 4.7:

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

TYPO3 < 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及其所有方法。

编辑:修正错别字。

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


上面代码中的listAction是来自designController.php。我应该在那个文件中添加以下内容:/** * (at)var \Vendor\Extension\Domain\Repository\SomeRepository * (at)inject */ protected $someRepository;还是应该创建categoryController.php并将其添加到其中? - Jeppe Donslund
你不需要创建一个新的控制器。只需像你(希望)使用designRepository一样将categoryRepository注入到DesignController中即可... - Daniel
class DesignController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {/**
  • designRepository
  • (at)var \TYPO3\OrigKentaurProducts\Domain\Repository\DesignRepository
  • (at)inject */ protected $designRepository;
/**
  • (at)var \TYPO3\OrigKentaurProducts\Domain\Repository\CategoryRepository
  • (at)inject */ protected $categoryRepository;
}And: '$categories = $this->categoryRepository->getCategories($catId);'这将返回"在非对象上调用成员函数getCategories()"在CategoryRepository.php中,我有:'public function getCategories($catId){'
- Jeppe Donslund
抱歉没有换行。 - Jeppe Donslund
6
加入依赖注入后,您需要清除缓存。 - Daniel
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接