Я создаю свое первое расширение TYPO3, я просто пытаюсь создать пример, который находится на странице TYPO3, см. ссылка на сайт. Похоже, что-то в контроллере идет не так. Я использую следующий код
class Tx_Mtclnt_Controller_AdsController
extends Tx_Extbase_MVC_Controller_ActionController {
public function listAction() {
$adsRepository = t3lib_div::makeInstance('Tx_Mtclnt_Domain_Repository_AdsRepository');
$ads = $adsRepository->findAll();
$this->view->assign('ads', $ads);
}
}
Я получаю следующую ошибку:
1: Фатальная ошибка с перехватом PHP: аргумент 1, передаваемый в TYPO3 \ CMS \ Extbase \ Persistence \ Repository :: __ construct (), должен реализовывать интерфейс TYPO3 \ CMS \ Extbase \ Object \ ObjectManagerInterface, не заданный, вызываемый в / home / mtclnt02 / typo3_src- 6.2.9 / typo3 / sysext / core / Classes / Utility / GeneralUtility.php в строке 4431 и определенной в /home/mtclnt02/typo3_src-6.2.9/typo3/sysext/extbase/Classes/Persistence/Repository.php строка 75 ( Дополнительная информация)
TYPO3 \ CMS \ Core \ Error \ Исключение, брошенное в файл
/home/mtclnt02/typo3_src-6.2.9/typo3/sysext/core/Classes/Error/ErrorHandler.php в строке 101.
Ошибка вы получаете результаты из репозитория, который вы пытаетесь создать. Класс TYPO3\CMS\Extbase\Persistence\Repository
имеет конструктор, который требует \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
в качестве аргумента. Так как вы не передаете класс objectManager в свой t3lib_div::makeInstance
, ошибка брошена. Вы можете избежать этого, используя инъекцию зависимостей, как показано ниже.
/**
* @var Tx_Mtclnt_Domain_Repository_AdsRepository
* @inject
*/
protected $adsRepository;
public function listAction() {
$adsRepository = $this->adsRepository->findAll();
}
Но я также вижу общая проблема здесь, потому что книга Extbase / Fluid, на которую вы ссылаетесь, устарела по некоторым темам. С моей точки зрения, упомянутая книга является весьма полезным ресурсом, если вы хотите понять концепция и архитектура расширения Extbase / Fluid, но не для примеров кода больше, так как многое изменилось в TYPO3 с момента написания книги.
Если вы хотите начать с разработки расширения TYPO3 для TYPO3 6.2 или выше, я бы посоветовал вам установить расширение построитель расширений и использовать его для создания вашего первого расширения. Руководство содержит краткое, но полезное руководство пользователя, который проведет вас через основы создания простого расширения TYPO3.
После того как вы создали свое первое расширение с помощью компоновщика расширений, вы можете продвинуться на несколько шагов дальше, добавив функциональность в код, созданный компоновщиком расширений.
Других решений пока нет …