9

我有几个这样的控制器:CategoryController 和 NewsController 以及类别和新闻的域模型以及两者的存储库。

在 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 中执行此操作,相同的函数会像魅力一样工作并返回数据库中的所有元素,对我来说更奇怪的是,如果我执行 $this->categoryRepository-> findByUid(1) 我得到了正确的元素作为结果

我还在我的 categoryRepository 中添加了一个测试函数:

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

如果我从 categoryController 调用这个函数,我会得到正确数量的元素。如果我从我的 newsController 中调用它,我会得到“0”...

我不明白...

我想念什么???我的错误在哪里?

4

4 回答 4

12

这困扰了我好几天(或几周)。如果您未在 TypoScript 中的某处定义以下内容,则 StoragePid(对附加数据库项目的页面的引用)不会进入数据库查询:

plugin.tx_myextension.persistence.storagePid = 4

将其放入您的 Page-TS 中,Tx_Extbase_Persistence_Repository 中的 findAll 方法应该可以正常工作。

周。

于 2012-10-18T12:01:17.373 回答
3

或者您可以强制存储库忽略存储页面:

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

从现在开始,您的存储库将从数据库中提取每条记录。

于 2014-09-01T10:08:39.867 回答
2

你确定 findAll() 的返回值为 NULL 吗?

可能是您的依赖注入不起作用。那么异常应该是这样的:

在非对象($this->categoryRepository)上调用 findAll()

同样在您的 injectCategoryRepository 中,您$categoryRepository使用lowerCamelCaseUpperCamelCase的注释 $CategoryRepository

希望这可以帮助..

于 2012-07-23T09:55:48.063 回答
1

正如 Hendrik 所说,您可以在页面 TS 中设置它。另一种解决方案是:在您的 BE 中,编辑包含插件的页面内容,选择存储数据库项目的 Sys 文件夹。这位于 Typo3 v6.1 的“行为”选项卡下

于 2014-01-31T11:13:05.607 回答