Контроллер действий и шаблон 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/
}
}
}