使用此链接中的信息:
https://docs.typo3.org/typo3cms/ExtbaseFluidBook/8-Fluid/9-using-php-based-views.html
我尝试创建一个输出JSON的动作。
我有一个带有列表操作的普通控制器:
public function listAction()
{
$storelocators = $this->storelocatorRepository->findAll();
$this->view->assign('storelocators', $storelocators);
}
在ext/my_storelocator/Classes/View/Storelocator
我有一个班级List.php
:
<?
class Tx_MyStorelocator_View_Storelocator_List extends Tx_Extbase_MVC_View_AbstractView {
public function render() {
return 'Hello World';
}
}
我得到的只是:
Sorry, the requested view was not found.
The technical reason is: No template was found. View could not be resolved for action "list" in class "My\MyStorelocator\Controller\StorelocatorController".
所以我猜道路径有问题。或者问题在哪里?
编辑:Extensioninfos
供应商:我的
key:my_storelocator
控制器:不确定(我使用extension_builder创建它,所以我猜我的控制器名称是Storelocator)
行动:列表
根据我的理解,像Tx_MyStorelocator_View_Storelocator_List
这样的类名应该是正确的。但它不起作用
答案 0 :(得分:1)
首先,TYPO3现在有一个内置的JSON视图,在这里详细描述:https://usetypo3.com/json-view.html。它可以让您轻松定义您想要渲染的属性。
错误消息表示您的Controller仍然指向TemplateView - 因为如果找不到已定义的模板文件,则会发生TemplateView抛出的错误。
您可以指定在控制器中使用哪个视图进行渲染。您可以通过$ defaultViewObjectName属性设置默认视图,如下所示:
/**
* @var string
*/
protected $defaultViewObjectName = '\TYPO3\CMS\Fluid\View\TemplateView';
您也可以在Controller内部进行初始化操作,如下所示:
public function initializeExportPDFAction(){
$this->defaultViewObjectName = 'Vendor\Extension\View\FileTransferView';
}
(但是,我还没有找到一种从动作中定义模板的方法,评论中的任何提示都会受到赞赏)
答案 1 :(得分:1)
您需要为控制器的HTML视图创建一个空文件,例如Resources/Private/Template/Storelocator/List.html
,即使您不打算使用HTML视图,或者您只是自己返回内容(这非常好)。
原因只是技术限制。
答案 2 :(得分:0)
您的路径语法可能已过期。不要在render()
中编写Classes/View/Storelocator/List.php
函数,而是尝试在listAction()
文件中编写Classes/Controller/StorelocatorController.php
函数。 Extension Builder应该为您创建此文件,如果您使用通常的&#34;列表创建聚合模型,创建,编辑...&#34;和这样的行动。
查看A journey through the Blog Example和以下章节创建第一个扩展程序,了解相关提示。
请记住,文档和Extension Builder生成的PHP代码文件之间存在不匹配。 使用Extbase和Fluid开发TYPO3扩展程序有一些部分是最新的,其他部分仍然使用旧语法。