Typo3 Extension Scheduler命令控制器

时间:2018-06-06 11:17:18

标签: command typo3 task scheduler

这是我在TYPO3扩展开发中遇到的问题。

我写了一个TYPO3扩展名。它将在浏览器中显示数据库中的新闻。但是我想配置一个调度程序任务来反复更新要显示的数据库中的新闻。

在编写此调度程序任务时,我使用了命令控制器。

namespace Vendor\Extension\Command;

class CheckNewsCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController
{
    public function simpleCommand()
    {
        $newsRepository = $this->objectManager->get( \Vendor\Extension\Domain\Repository\NewsRepository::class );
        \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($newsRepository);

        $all_news = $newsRepository->findAll();
        \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($all_news);
    }
}

但变量 $ all_news 不包含任何东西,它等于 NULL !!!这意味着 NewsRepository findAll()功能根本不起作用!!!

相比之下,我还在普通的Controller类中使用了 NewsRepository Vendor \ Extension \ Controller \ NewsController

namespace Vendor\Extension\Controller;

class NewsController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
    public function listAction()
    {
        $newsRepository = $this->objectManager->get( \Etagen\EtSocNewsSt\Domain\Repository\NewsRepository::class );

        $all_news = $newsRepository->findAll();
        \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($all_news);
    }

并且,在 NewsController 中,函数 NewsRepository :: findAll() DID确实有效,并返回数据库中的所有记录。

那么,谁能告诉我,为什么存储库功能在类 Vendor \ Extension \ Controller \ NewsController 中工作,但在课堂上工作 Vendor \ Extension \ Command \ CheckNewsCommandController

1 个答案:

答案 0 :(得分:0)

答案是 EASY :您需要在CommandController OR 中为新闻记录定义storagePid,将NewsRepository的设置更改为 IGNORE storagePid。

如何为CommandController设置storagePid: https://worksonmymachine.org/blog/commandcontroller-and-storagepid

如何设置存储库以忽略s​​toragePid: http://typo3.sascha-ende.de/docs/development/database/how-to-ignore-the-page-id-pid-in-repository-database-query/