В настоящее время у меня есть задача планировщика, но я хочу использовать функцию из моего репозитория extbase (в том же расширении).
Я продолжаю получать «PHP Fatal error: вызов функции-члена add () для не-объекта», независимо от того, как я пытаюсь включить мой репо или контроллер из extbase.
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
Может кто-нибудь объяснить мне, как я могу получить доступ к моему репозиторию (или контроллеру) -extbase- из моего SampleTask.php.
Использование TYPO3 6.2.
Спасибо.
Вы получаете эту ошибку php, потому что вы создали свой контроллер с makeInstance()
. Если вы используете makeInstance для получения objectManager ( \TYPO3\CMS\Extbase\Object\ObjectManager
) и используете $objectManager->get('TYPO3\ExtName\Controller\SampleController')
, то инъекция зависимостей внутри вашего контроллера будет работать (например, ваша хранилище).
Но вы можете использовать objectManager, чтобы сразу же получить репозиторий, поэтому вам не нужно вызывать действие контроллера:
Что-то вроде этого:
namespace TYPO3\ExtName\Task; class SampleTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask { public function execute() { $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Extbase\Object\ObjectManager'); $sampleRepository= $objectManager->get('\TYPO3\ExtName\Domain\Repository\SampleRepository'); $new = new \TYPO3\ExtName\Domain\Model\Sample; $new->setName('test'); $sampleRepository->add($new); $objectManager->get('TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface')->persistAll(); } }