2012-07-22 53 views
8

我有幾個像這樣的控制器:類別控制器和NewsController 以及兩個領域的類別和新聞和倉庫模型。extbase知識庫findAll()返回結果null

在NewsController我不喜歡這樣的dependencyInjection(以同樣的方式在categoryController):

/** 
* categoryRepository 
* 
* @var Tx_MyExtension_Domain_Repository_CategoryRepository 
*/ 
protected $categoryRepository; 


    /** 
* injectCategoryRepository 
* 
* @param Tx_MyExtension_Domain_Repository_CategoryRepository $CategoryRepository 
* @return void 
*/ 
public function injectCategoryRepository(Tx_MyExtension_Domain_Repository_CategoryRepository $categoryRepository) { 
    $this->categoryRepository = $categoryRepository; 
} 

當我現在想在一個函數是這樣的:

/** 
* action getCategoriesAjax 
* 
* @param Tx_MyExtension_Domain_Model_News 
* @return void 
*/ 
public function getCategoriesAjaxAction() { 
    $categories = $this->categoryRepository->findAll(); 
    $this->view->assign('categories',$categories); 
} 

我得到一個空的結果回來。

我奇怪的是,如果我這樣做是在CategoryController,相同功能的工作方式類似的魅力,並返回數據庫中的所有元素,甚至陌生人對我來說,那如果我做了這個$ - > categoryRepository-> findByUid(1)我得到正確的元素,結果爲

我也加入到我的categoryRepository測試功能:

public function test(){ 
    $query = $this->createQuery(); 
    $result = $query->execute(); 
    $amount = $result.count(); 
} 

如果我把從categoryController這個功能,我回到正確的元素量。如果我打電話這個從我newsController我得到「0」背...

我不明白這一點...

我怎麼錯過??? 我的錯誤在哪裏?

回答

2

你確定findAll()的返回值是NULL嗎?

可能是因爲您的依賴注入不起作用。然後,該例外應該是這樣的:你寫

的findAll()調用一個非對象($這個 - > categoryRepository)

而且在injectCategoryRepository $categoryRepositorylowerCamelCase和在註釋中UpperCamelCase$CategoryRepository

希望這有助於..

+1

Thx用於提示上/下攝像機的提示。我跳了,這將是解決方案...我會更深入地瞭解這一點,以確保不會在嚴重的地方有這個。我沒有收到錯誤,我得到一個Tx_Extbase_Persistence_QueryResult對象,但沒有結果。我也沒有收到錯誤信息。 感謝您的支持! – kapale 2012-07-23 14:02:03

+0

第二次發現UpperCamelCase問題,但不幸的是它沒有解決我的問題。 (刪除所有緩存後) – kapale 2012-07-23 14:13:14

11

這已經讓我煩擾了幾天(或幾周)。該StoragePid(參考到你的數據庫項目連接到網頁)不會使它的數據庫查詢,如果你不定義以下某處您的TypoScript:

plugin.tx_myextension.persistence.storagePid = 4 

在您的頁面 - 將這個TS和Tx_Extbase_Persistence_Repository中的findAll方法應該工作正常。

周。

+0

我愛你! – 2013-02-25 17:33:22

1

正如亨德里克所說,你可以在你的page-TS中設置它。 另一個解決方案是:在你的編輯你的頁面內容包含插件,選擇系統文件夾,其中你的數據庫項目存儲。這可在Typo3 v6的「行爲」選項卡下找到。1

3

或者你可能會迫使庫忽略存儲Page:

class MymodelRepository extends \TYPO3\CMS\Extbase\Persistence\Repository { 
    public function initializeObject() { 

    $this->defaultQuerySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings'); 
    $this->defaultQuerySettings->setRespectStoragePage(FALSE); 
} 
} 

從現在起,你的版本庫將拉動每個記錄從數據庫中。

+0

查看所有選項的文檔:https://wiki.typo3.org/Default_Orderings_and_Query_Settings_in_Repository – 2016-10-05 12:51:14