gpt4 book ai didi

php - 在调度程序任务中执行存储库功能

转载 作者:可可西里 更新时间:2023-11-01 13:13:20 25 4
gpt4 key购买 nike

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

我不断收到“PHP fatal error :调用非对象上的成员函数 add()”,无论我如何尝试从 extbase 中包含我的存储库或 Controller 。

我的 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 访问我的存储库(或 Controller )-extbase-。

使用 TYPO3 6.2。

谢谢。

最佳答案

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

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

像这样:

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

关于php - 在调度程序任务中执行存储库功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com