5

異なるコントローラーで関数を呼び出すことは可能ですか? FindByCategoryGrouped($catId)designRepository.php とgetCategories($catId)categoryRepository.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);
}
4

1 に答える 1

23

インストールされているすべての extbase 拡張機能のすべてのリポジトリに注入できます。依存性注入コードをコントローラーに追加するだけです。TYPO3 のバージョンに応じて、次のいずれかになります。

TYPO3 >= 6.0:

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

@inject専用の注入メソッドと比較して、アノテーションはあまりうまく機能しないことに注意してください。したがって、アプリケーションのパフォーマンスを微調整する必要があり、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、リポジトリを注入したコントローラーのすべてのメソッドで使用できます。

編集:タイプミスを修正しました。

編集: 依存性注入を追加した後、キャッシュをクリアする必要があります!

于 2013-11-01T13:21:37.367 に答える