【问题标题】:TYPO3 - Call another repositoryTYPO3 - 调用另一个存储库
【发布时间】:2013-11-01 12:16:17
【问题描述】:

是否可以在不同的控制器中调用一个函数?我需要在 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);
}

【问题讨论】:

    标签: php typo3 fluid


    【解决方案1】:

    您可以注入每个已安装的 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

    /**
     * @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 并将其添加到那里?
    • 您不必创建新的控制器。只需将 categoryRepository 注入到您的 DesignController 中,就像您(希望)对 designRepository 所做的那样......
    • 'class DesignController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController { /** * designRepository * * (at)var \TYPO3\OrigKentaurProducts\Domain\Repository\DesignRepository * (at)注入 /protected $designRepository; /* * (at)var \TYPO3\OrigKentaurProducts\Domain\Repository\CategoryRepository * (at)inject */ protected $categoryRepository;'并且:'$categories = $this->categoryRepository->getCategories($catId);'这给了我“在非对象上调用成员函数 getCategories()” 在 CategoryRepository.php 我有:'public function getCategories($catId){'
    • 抱歉,缺少换行符。
    • 并且添加依赖注入后,你必须清除缓存
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2017-12-25
    • 2014-09-17
    相关资源
    最近更新 更多