TYPO3 v10 动作控制器和子文件夹内的模板

Posted

技术标签:

【中文标题】TYPO3 v10 动作控制器和子文件夹内的模板【英文标题】:TYPO3 v10 action controller and template inside subfolders 【发布时间】:2020-02-06 14:35:37 【问题描述】:

背景

在 TYPO3 v9 之前,可以将用于相应控制器操作的控制器和流体模板放入子文件夹中,如下所示:

类/控制器/产品/CarController.php

namespace Vendor\MyExtension\Controller\Product;

class Car extends AbstractProduct 
   public function listAction()
      // ...
   


ext_localconf.php

ExtensionUtility::configurePlugin(
    'MyExtension',
    'CarsPlugin',
    ['Product\Cars' => 'list'],
    []
);      

由于控制器名称为“Product\Cars”,因此相对流体模板路径将被解析为:

typo3conf/ext/my_extension/Resources/Private/Templates/Product/Cars/List.html

在 TYPO3 v10 中,这不再起作用。我想这是因为现在你应该给出一个完全限定的控制器名称,如下所示:

ext_localconf.php

ExtensionUtility::configurePlugin(
    'MyExtension',
    'CarsPlugin',
    [\Vendor\MyExtension\Controller\Product\CarController::class => 'list'],
    []
);

现在,TYPO3 只尝试重新喜欢这个模板: /typo3conf/ext/my_extension/Resources/Private/Templates/Car/List.html

问题

TYPO3 v10 有没有办法知道控制器在子文件夹中并解析模板,同时检查正确的子文件夹?

当文件结构相同时,它会让生活变得更加轻松。我还认为,当使用从父类继承的域模型和控制器来表示复杂的层次结构时,这一点尤其重要,从而允许系统扩展(想想产品/飞机、产品/船舶等)。

【问题讨论】:

这可能是一个错误。我认为 TYPO3 不会想要破坏所有扩展。 好吧,也有可能它根本就没有打算以这种方式工作,但如果没有找到任何线索。嗯.. 即使它从来都不是预期的行为,它也将是一个不错的功能,就像以前那样。也许在forge.typo3.org/projects/typo3cms-core/issues 上开票? 好主意!我会对此进行调查并在此处发布任何结果。 这里的不一致是故意的吗? (“汽车”与“汽车”,“汽车”与“汽车控制器”) 【参考方案1】:

您可以添加一长串文件夹来搜索您的布局/模板/部分。即使在其他扩展的文件夹中。较高的密钥将首先尝试

plugin.tx_myextension 
    view 
        templateRootPaths 
             10 = EXT:my_extension/Resources/Private/Templates/
             20 = EXT:my_extension/Resources/Private/Templates/Product/
        
        partialRootPaths 
            10 = EXT:my_extension/Resources/Private/Partials/
            20 = EXT:my_extension/Resources/Private/Partials/Product/
        
        layoutRootPaths 
            10 = EXT:my_extension/Resources/Private/Layouts/
            20 = EXT:my_extension/Resources/Private/Layouts/Product/
        
    

【讨论】:

嗯,我已经摆弄了根路径,但没有成功。但我会再试一次。编辑:实际上,这是我目前的解决方案。由于 TYPO3 查找文件的目录重叠,我仍然觉得它有点太模棱两可了。但我想这就是要走的路。

以上是关于TYPO3 v10 动作控制器和子文件夹内的模板的主要内容,如果未能解决你的问题,请参考以下文章

TYPO3 V10 - EXT:news 自定义类型和持久性映射

TYPO3 v10 - 在 eID_include 中使用上下文 API 获取 feUser 对象

TYPO3 v10 持久性映射

TYPO3 v10 没有作曲家自动加载的功能测试

TYPO3 v10 routeEnhancer 生成 slug 但无法解决

如何在 TYPO3 v10/v11 中为控制器操作参数定义正则表达式验证?