Typo3扩展PHP视图

Typo3扩展PHP视图,typo3,fluid,typo3-7.6.x,Typo3,Fluid,Typo3 7.6.x,使用此链接中的信息: 我尝试创建一个操作来输出JSON 我有一个具有列表操作的普通控制器: public function listAction() { $storelocators = $this->storelocatorRepository->findAll(); $this->view->assign('storelocators', $storelocators); } 在ext/my_storelocator/Classes/View/st

使用此链接中的信息:

我尝试创建一个操作来输出JSON

我有一个具有列表操作的普通控制器:

public function listAction()
{
    $storelocators = $this->storelocatorRepository->findAll();
    $this->view->assign('storelocators', $storelocators);
}
ext/my_storelocator/Classes/View/storelocator
中,我有一个class
List.php

<?

class Tx_MyStorelocator_View_Storelocator_List extends Tx_Extbase_MVC_View_AbstractView {
        public function render() {
                return 'Hello World';
        }
}
所以我猜路径有问题。或者问题出在哪里

编辑:扩展信息

供应商:我的
关键字:my_storelocator
控制器:不确定(我用扩展名创建了它,所以我想我的控制器名是Storelocator)
行动:列出


根据我的理解,像
Tx\u MyStorelocator\u View\u Storelocator\u List这样的类名应该是正确的。但是它不起作用

您的路径语法可能已经过时了。不要在
Classes/View/Storelocator/List.php
中编写
render()
函数,而是尝试在
Classes/Controller/StorelocatorController.php
文件中编写
listAction()
函数。如果您使用通常的“列表、创建、编辑…”等操作创建聚合模型,扩展生成器应该已经为您创建了此文件

回顾并阅读以下章节,创建第一个扩展,以获取提示


请记住,文档和扩展生成器生成的PHP代码文件之间存在不匹配。使用Extbase和Fluid开发TYPO3扩展时,有些部分是最新的,其他部分仍然使用旧语法。

您的路径语法可能已经过时。不要在
Classes/View/Storelocator/List.php
中编写
render()
函数,而是尝试在
Classes/Controller/StorelocatorController.php
文件中编写
listAction()
函数。如果您使用通常的“列表、创建、编辑…”等操作创建聚合模型,扩展生成器应该已经为您创建了此文件

回顾并阅读以下章节,创建第一个扩展,以获取提示


请记住,文档和扩展生成器生成的PHP代码文件之间存在不匹配。使用Extbase和Fluid开发TYPO3扩展有一些部分是最新的,其他部分仍然使用旧语法。

首先,TYPO3现在有一个内置的JSON视图,这里有详细描述:。它允许您轻松定义要渲染的属性

错误消息意味着您的控制器仍指向TemplateView,因为如果TemplateView找不到已定义的模板文件,则会抛出该错误

可以指定要在控制器内渲染的视图。您可以通过$defaultViewObjectName属性设置默认视图,如下所示:

/**
 * @var string
 */
protected $defaultViewObjectName = '\TYPO3\CMS\Fluid\View\TemplateView';
您还可以在控制器内部初始化操作中设置它,如下所示:

public function initializeExportPDFAction(){
    $this->defaultViewObjectName = 'Vendor\Extension\View\FileTransferView';
}

(然而,我还没有找到一种从actions中定义模板的方法,如果评论中有任何提示,我将不胜感激)

首先,TYPO3现在有一个内置的JSON视图,在这里详细描述:。它允许您轻松定义要渲染的属性

错误消息意味着您的控制器仍指向TemplateView,因为如果TemplateView找不到已定义的模板文件,则会抛出该错误

可以指定要在控制器内渲染的视图。您可以通过$defaultViewObjectName属性设置默认视图,如下所示:

/**
 * @var string
 */
protected $defaultViewObjectName = '\TYPO3\CMS\Fluid\View\TemplateView';
您还可以在控制器内部初始化操作中设置它,如下所示:

public function initializeExportPDFAction(){
    $this->defaultViewObjectName = 'Vendor\Extension\View\FileTransferView';
}

(但是,我还没有找到从actions中定义模板的方法,请提供评论中的任何提示)

您需要为控制器的HTML视图创建一个空文件,例如
Resources/Private/template/Storelocator/List.HTML
,即使您不打算使用HTML视图,或者您只是自己返回内容(这很好)


原因仅仅是技术上的限制。

您需要为控制器的HTML视图创建一个空文件,例如
Resources/Private/Template/Storelocator/List.HTML
,即使您不打算使用HTML视图,或者您只是自己返回内容(这很好)


原因只是技术上的限制。

可能已经过时,这是我的问题。。另一方面,我有一个带有
listAction()
的控制器。我可以在那里输出json并使用带有
disableAllHeaderCode
的页面类型。但是当没有模板时,它仍然会加载模板和可能的html注释/或错误。我是否可以禁用模板(和呈现)?向listAction添加一条返回语句。您可以在这里以字符串形式返回JSON对象。TYPO3评估动作的返回数据类型,如果返回数据类型为void,则尝试渲染视图。因此,只需返回一些内容,即使是空字符串,也不会调用view->render方法,因为缺少List.html模板;)这不是问题所在。如果该操作不存在或不执行,@nbar将不会出现此错误。@Lasse Yes我发现当我有一个空的List.html+一些拼写错误脚本来禁用html注释时,这是有效的。谢谢你用错了。如果没有要渲染的内容,请指向您自己的视图,而不是启动模板视图。可能它已过期,这是我的问题。。另一方面,我有一个带有
listAction()
的控制器。我可以在那里输出json并使用带有
disableAllHeaderCode
的页面类型。但是当没有模板时,它仍然会加载模板和可能的html注释/或错误。我是否可以禁用模板(和呈现)?向listAction添加一条返回语句。您可以在这里以字符串形式返回JSON对象。TYPO3评估动作的返回数据类型,如果返回数据类型为void,则尝试呈现vie