2013-11-01 27 views
4

是否可以在不同的控制器中调用一个函数?我需要调用在designRepository.php FindByCategoryGrouped($catId)getCategories($catId)从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

你可以注入每个已安装extbase延伸的每一个存储库。只需将依赖注入代码添加到您的控制器。根据您的TYPO3版本IST之一:

TYPO3> = 6.0:

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

注意,@inject注释不相较于专用的注射方法执行得非常好。所以,如果你需要tweek您的应用程序的性能,并有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及其注入存储库的控制器中的所有方法。

编辑:固定错字。

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

+0

我的listAction在上面的代码中,来自designController.php。在该文件中,我要补充 /** * (AT),无功\供应商\延期\域\库\ SomeRepository *(AT)注入 */ 保护$ someRepository; 或者我应该创建categoryController.php并将其添加到那里? –

+0

您不必创建新的控制器。只需将categoryRepository注入到您的DesignController中,就像您(有希望)使用designRepository一样 – Daniel

+0

“类DesignController延伸\ TYPO3 \ CMS \ Extbase \的mvc \控制器\ {的ActionController \t/** \t * designRepository \t * \t *(在)VAR \ TYPO3 \ OrigKentaurProducts \域\库\ DesignRepository \t *(at)inject \t */ \t protected $ designRepository; \t \t/** \t *(AT),无功\ TYPO3 \ OrigKentaurProducts \域\库\ CategoryRepository \t *(AT)注入 \t */ \t保护$ categoryRepository;” And:'$ categories = $ this-> categoryRepository-> getCategories($ catId);' 这给了我 在CategoryRepository.php我有“非对象上调用一个成员函数getCategories()”: “公共职能getCategories($ CATID){” –

相关问题