Можно ли вызвать функцию в разных контроллерах? Мне нужно вызвать FindByCategoryGrouped($catId)
в designRepository.php и getCategories($catId)
из категорииRepository.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 ist:
TYPO3> = 6,0:
/** * @var \Vendor\Extension\Domain\Repository\SomeRepository * @inject */ protected $someRepository;
Обратите внимание, что @inject
Annotation не работает очень хорошо по сравнению с выделенным методом инъекции. Поэтому, если вам нужно подкрутить производительность вашего приложения и иметь много инъекций в контроллере yout, вам следует рассмотреть возможность переключения на методы ввода:
/** * @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
со всеми его методами в контроллере, в который вы вводили репозиторий.
Изменить: исправлена опечатка.
Изменить: после добавления инъекции зависимостей вам нужно очистить кеш!