TYPO3 扩展生成视图错误
TYPO3 extension generate view error
我正在构建我的第一个 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 Fatal Error: Argument 1 passed to TYPO3\CMS\Extbase\Persistence\Repository::__construct() must implement interface TYPO3\CMS\Extbase\Object\ObjectManagerInterface, none given, called in /home/mtclnt02/typo3_src-6.2.9/typo3/sysext/core/Classes/Utility/GeneralUtility.php on line 4431 and defined in /home/mtclnt02/typo3_src-6.2.9/typo3/sysext/extbase/Classes/Persistence/Repository.php line 75 (More information)
TYPO3\CMS\Core\Error\Exception thrown in file
/home/mtclnt02/typo3_src-6.2.9/typo3/sysext/core/Classes/Error/ErrorHandler.php in line 101.
您从您尝试创建的存储库中得到的错误结果。 class TYPO3\CMS\Extbase\Persistence\Repository
有一个构造函数,它需要 \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
作为参数。由于您没有在 t3lib_div::makeInstance
中传递 objectManager class,因此会引发错误。您可以通过使用如下所示的依赖注入来避免这种情况。
/**
* @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 and use it to create your first extension. The manual contains a short but helpful users manual,它会指导您完成创建简单 TYPO3 扩展的基础知识。
使用扩展构建器创建第一个扩展后,您可以通过向扩展构建器创建的代码添加功能来进一步执行一些步骤。
我正在构建我的第一个 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 Fatal Error: Argument 1 passed to TYPO3\CMS\Extbase\Persistence\Repository::__construct() must implement interface TYPO3\CMS\Extbase\Object\ObjectManagerInterface, none given, called in /home/mtclnt02/typo3_src-6.2.9/typo3/sysext/core/Classes/Utility/GeneralUtility.php on line 4431 and defined in /home/mtclnt02/typo3_src-6.2.9/typo3/sysext/extbase/Classes/Persistence/Repository.php line 75 (More information)
TYPO3\CMS\Core\Error\Exception thrown in file /home/mtclnt02/typo3_src-6.2.9/typo3/sysext/core/Classes/Error/ErrorHandler.php in line 101.
您从您尝试创建的存储库中得到的错误结果。 class TYPO3\CMS\Extbase\Persistence\Repository
有一个构造函数,它需要 \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
作为参数。由于您没有在 t3lib_div::makeInstance
中传递 objectManager class,因此会引发错误。您可以通过使用如下所示的依赖注入来避免这种情况。
/**
* @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 and use it to create your first extension. The manual contains a short but helpful users manual,它会指导您完成创建简单 TYPO3 扩展的基础知识。
使用扩展构建器创建第一个扩展后,您可以通过向扩展构建器创建的代码添加功能来进一步执行一些步骤。