TYPO3扩展名生成视图错误


TYPO3 extension generate view error

我正在构建我的第一个 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 行中定义(更多信息)

错别字3''CMS''核心''错误''文件中抛出的异常/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作为参数。由于您没有在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 扩展开发开始,我建议您安装扩展扩展构建器并使用它来创建您的第一个扩展。该手册包含一个简短但有用的用户手册,指导您完成创建简单 TYPO3 扩展的基础知识。

使用扩展生成器创建第一个扩展后,可以通过向扩展构建器创建的代码添加功能来进一步执行一些步骤。