extbase存储库findAll()返回结果null



我有几个类似的控制器: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),则会得到正确的元素

我还在我的分类库中添加了一个测试函数:

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

如果我从categoryController调用这个函数,我会返回正确数量的元素。如果我从我的newsController打电话,我会得到"0"回复。。。

我不明白…

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

这已经困扰我好几天(或几周)了。如果您没有在TypoScript中定义以下内容,StoragePid(对数据库项所附页面的引用)将无法进入数据库查询:

plugin.tx_myextension.persistence.storagePid = 4

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

周。

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

class MymodelRepository extends TYPO3CMSExtbasePersistenceRepository {
  public function initializeObject() {
  $this->defaultQuerySettings = $this->objectManager->get('TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings');
  $this->defaultQuerySettings->setRespectStoragePage(FALSE);
 }
}

从现在起,您的存储库将从数据库中提取每个记录。

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

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

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

此外,在您的injectCategoryRepository中,您在lowerCamelCaseUpperCamelCase$CategoryRepository 中的注释中编写$categoryRepository

希望这能有所帮助。。

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

相关内容

  • 没有找到相关文章

最新更新