2012-07-22 25 views
8

Aşağıdakiler gibi birkaç Denetleyicim var: CategoryController ve NewsController Her ikisi için de kategori ve haber ve reposirüsler için etki alanı modelleri. extbase deposu findAll(), sonuç null değerini döndürür

NewsController ben (categoryController içinde aynı şekilde) Böyle bir DependencyInjection yapın:

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

Böyle bir fonksiyon şey şimdi çalışıyorum zaman:

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

ben boş bir sonuç alın.

Benim için garip olan şey, eğer CategoryController'da bunu yapıyorumsa, aynı işlev, çekicilik gibi çalışır ve veritabanındaki tüm öğeleri döndürür ve benim için daha da yabancıdır, eğer bu bir $ -> categoryRepository-> findByUid (1) sonucu olarak doğru elemanı alıyorum. Ben categoryController gelen bu işlevi çağırırsanız

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

, geri elemanların doğru miktarda almak:

Ben de categoryRepository için bir test işlevi ekledi. Benim newsController bu çağırıyorum Eğer ben neyi özlüyorsun

...

ben anlamadım ... geri "0" olsun ??? Hatam nerede?

cevap

2

FindAll() öğesinin dönüş değeri NULL olduğuna emin misiniz?

Bağımlılık Enjeksiyonunuz ürününüz çalışmıyor olabilir. Sonra İstisna böyle bir şey olmalı:

findAll() Olmayan Nesnesindeki adlandırılır ($ this-> categoryRepository) Ayrıca

sizin injectCategoryRepository içinde yazdığınız $categoryRepositoryiçinde lowerCamelCase ve Ek açıklamalardaki bu yardımcı olur$CategoryRepository

Umut .. UpperCamelCase

+1

Üst/altCamelCase ile ipucu için thx. Bunun çözüm olacağını umuyordum ... Bu konuda daha derinlemesine bakacağım. Bir hata alamıyorum, bir Tx_Extbase_Persistence_QueryResult nesnesi geri aldım, ancak sonuçta yok. Ben de bir hata mesajı alıyorum. Desteğiniz için teşekkür ederiz! – kapale

+0

UpperCamelCase sorununu ikinci bir sırada buldum, ancak maalesef sorunumu çözmedi. (Tüm önbellekleri sildikten sonra) – kapale

11

Bu, beni günlerce (veya haftalarca) bekletti.

plugin.tx_myextension.persistence.storagePid = 4 

kullanıcı sayfanızı koy: bir yerde senin TypoScript aşağıdaki tanımlar yoksa StoragePid (veritabanı ürün eklenen sayfaya referans) veri tabanı sorgusu bunu yapmaz TS ve Tx_Extbase_Persistence_Repository adlı findAll yönteminin düzgün çalışması gerekir.

Hafta.

+0

Seni bunun için seviyorum! –

1

Hendrik'in dediğiniz gibi ayarlayabileceğini söyledi. Başka bir çözüm şudur: sizde BE, eklentiyi içeren sayfa içeriğinizi düzenleyin, db öğelerinizin saklandığı Sys Klasörünü seçin. Bu Typo3 v6 için "Davranış" sekmesi altında bulunur.1

3

Yoksa Depolama Page görmezden Deposu zorlayacağını:

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

şimdi Depo veritabanından her kayıt çeker andan itibaren.

+0

tüm seçenekler için belgelere bakın: https://wiki.typo3.org/Default_Orderings_and_Query_Settings_in_Repository –