Контроллер действий и шаблон TYPO3 v10 внутри подпапок

Задний план

До 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 узнать, что контроллер находится во вложенной папке, и разрешить шаблон, а также проверить правильную вложенную папку?

Это значительно упрощает жизнь, когда файловая структура одинакова. Я также думаю, что это особенно важно при представлении сложных иерархий с моделями предметной области и контроллерами, унаследованными от родительских классов, что позволяет системе масштабироваться (подумайте о продукте / самолете, продукте / корабле и т. Д.).

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/
        }
    }
}
Другие вопросы по тегам