Typo3扩展PHP视图

时间:2016-07-13 14:46:59

标签: typo3 fluid typo3-7.6.x

使用此链接中的信息:
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这样的类名应该是正确的。但它不起作用

3 个答案:

答案 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扩展程序有一些部分是最新的,其他部分仍然使用旧语法。