Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在调度程序任务中执行存储库函数_Php_Task_Typo3_Scheduler_Extbase - Fatal编程技术网

Php 在调度程序任务中执行存储库函数

Php 在调度程序任务中执行存储库函数,php,task,typo3,scheduler,extbase,Php,Task,Typo3,Scheduler,Extbase,目前我有一个调度程序任务,但我想使用extbase存储库中的函数(在同一扩展中) 无论我如何尝试从extbase中包含我的repo或控制器,我总是得到“PHP致命错误:对非对象调用成员函数add()” My SampleTask.php: namespace TYPO3\ExtName\Task; class SampleTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask { public function execute() {

目前我有一个调度程序任务,但我想使用extbase存储库中的函数(在同一扩展中)

无论我如何尝试从extbase中包含我的repo或控制器,我总是得到“PHP致命错误:对非对象调用成员函数add()”

My SampleTask.php:

namespace TYPO3\ExtName\Task;

class SampleTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask {

    public function execute() {
        $controller = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\ExtName\Controller\SampleController');
        $new = new \TYPO3\ExtName\Domain\Model\Sample;
        $new->setName('test');
        $controller->createAction($new);
    }
}
并在我的ext_localconf.php中正确定义

有人能告诉我如何从SampleTask.php访问我的存储库(或控制器)-extbase吗

使用TYPO3 6.2


谢谢。

您将收到此php错误,因为您使用
makeInstance()
实例化了控制器。如果使用makeInstance获取objectManager(
\TYPO3\CMS\Extbase\Object\objectManager
)并使用
$objectManager->get('TYPO3\ExtName\Controller\SampleController')
,则控制器内的依赖项注入将起作用(例如,存储库)

但您可以使用objectManager立即获取存储库,因此不必调用控制器操作:

大概是这样的:

namespace TYPO3\ExtName\Task;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\ExtName\Domain\Repository\SampleRepository;
use TYPO3\ExtName\Domain\Model\Sample;
use TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface;

class SampleTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask {

    public function execute() {
        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
        $sampleRepository= $objectManager->get(SampleRepository::class);
        $new = new Sample();
        $new->setName('test');
        $sampleRepository->add($new);
        $objectManager->get(PersistenceManagerInterface::class)->persistAll();
    }
}

嗨,丹尼尔,谢谢你的回答!我的调度程序任务不再抛出错误,但我仍然无法向存储库添加任何内容。我认为Pid是问题所在,尝试使用configurationManager进行设置,但没有效果。我可以毫无问题地将项目添加到控制器中的存储库中。此外,当我将插件添加到内容元素时,我还必须在“记录存储页面”中设置PID。Pid是在typoscript配置中设置的。很可能您必须手动调用PersienceManager来保存添加的对象。我把它添加到了我的答案中。添加经理起作用了!我现在遇到的唯一问题是数据库中的pid设置为2(?)。在您的情况下,我建议通过$new->setPid(1234)设置pid;谢谢你的帮助,成功了:)