2013-11-01 2 views
4

다른 컨트롤러에서 함수를 호출 할 수 있습니까? 난 당신이 설치된 모든 extbase 확장의 모든 저장소를 삽입 할 수 categoryRepository.phpTYPO3 - 다른 저장소 호출

에서
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); 
} 

답변

17

을 designRepository.php에 FindByCategoryGrouped($catId)getCategories($catId)를 호출해야합니다. 컨트롤러에 의존성 주입 코드를 추가하기 만하면됩니다. 당신의 TYPO3 버전 표준시에 따라 다음 중 하나를

TYPO3> = 6.0 다음 ​​@inject 주석 전용 분사 방식에 비해 매우 잘 수행하지 않는

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

참고.

/** 
* @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 : 당신이 응용 프로그램의 성능을 형식에 설정을 몇 필요가 있고 행해져 Yout 컨트롤러의 많은 주사를 그래서 만약 당신이 방법을 주입 전환을 고려해야합니다

/** 
* @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; 
} 

어쨌든를 사용할 수 있습니다.에 저장소에 주입 한 모든 메소드가있는 컨트롤러

편집 : 오타가 수정되었습니다.

편집 : 종속성 삽입을 추가 한 후 캐시를 지워야합니다!

+0

위의 코드에서 내 listAction은 designController.php입니다. 해당 파일에 내가 추가해야됩니다 /** * 확장 \ 도메인 \ 저장소 \이 SomeRepository * (에서) */ 보호 $ someRepository를 주입 \ var에 \ 공급 업체 (에서); categoryController.php를 만들고 거기에 추가해야합니까? –

+0

새 컨트롤러를 생성하지 않아도됩니다. 그냥 당신의 designController에 categoryRepository를 삽입하면 (잘하면) designRepository와 함께 할 수 있습니다. – Daniel

+0

'클래스 DesignController는 \ TYPO3 \ CMS \ Extbase \ MVC \ 컨트롤러 \ ActionController { \t/** \t * designRepository \t * \t * (에서) VAR \ TYPO3 \ OrigKentaurProducts \ 도메인 \ 저장소 \ DesignRepository \t를 확장 * (at) 주입 \t */ \t 보호 된 $ 디자인 리포 지 토리; \t \t/** \t * (에서) VAR \ TYPO3 \ OrigKentaurProducts \ 도메인 \ 저장소 \ CategoryRepository \t * \t */ \t 보호 $ categoryRepository를 주입 (에서); ' 및 : '$ categories = $ this-> categoryRepository-> getCategories ($ catId);' 저를 제공 내가 가진 CategoryRepository.php에서 "가 아닌 객체에 멤버 함수 getCategories()를 호출"줄 바꿈 누락 –

관련 문제