我正在构建我的第一个TYPO3扩展程序,我只想尝试构建TYPO3页面上的示例,请参阅link。看起来控制器中的某些东西出了问题。我使用以下代码
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 Catchable致命错误:传递给TYPO3 \ CMS \ Extbase \ Persistence \ Repository :: __ construct()的参数1必须实现接口TYPO3 \ CMS \ Extbase \ Object \ ObjectManagerInterface,没有给出,在/ home / mtclnt02中调用第4431行上的/typo3_src-6.2.9/typo3/sysext/core/Classes/Utility/GeneralUtility.php,在/home/mtclnt02/typo3_src-6.2.9/typo3/sysext/extbase/Classes/Persistence/Repository.php中定义第75行(更多信息)
文件中抛出TYPO3 \ CMS \ Core \ Error \ Exception 第101行/home/mtclnt02/typo3_src-6.2.9/typo3/sysext/core/Classes/Error/ErrorHandler.php。
答案 0 :(得分:0)
您从您尝试创建的存储库获得的错误结果。类TYPO3\CMS\Extbase\Persistence\Repository
有一个构造函数,需要\TYPO3\CMS\Extbase\Object\ObjectManagerInterface
作为参数。由于您未在t3lib_div::makeInstance
中传递objectManager类,因此会引发错误。您可以通过使用如下所示的依赖注入来避免这种情况。
/**
* @var Tx_Mtclnt_Domain_Repository_AdsRepository
* @inject
*/
protected $adsRepository;
public function listAction() {
$adsRepository = $this->adsRepository->findAll();
}
但我在这里也看到了一般问题,因为你引用的Extbase / Fluid书在某些主题上已经过时了。从我的观点来看,如果你想了解Extbase / Fluid扩展的概念和架构,那么所提到的书是一个非常有用的资源,但不是代码示例任何更多,因为自书写完以来,TYPO3中的许多事情都发生了变化。
如果您想从TYPO3 6.2或更高版本的TYPO3扩展程序开始,我建议您安装扩展程序extension builder并使用它来创建您的第一个扩展程序。本手册包含一个简短但有用的users manual,它将指导您完成创建简单TYPO3扩展的基础知识。
使用扩展构建器创建第一个扩展后,您可以通过向扩展程序集创建的代码添加功能来进一步采取措施。