我正在尝试为某些类别生成树URL。
URL应如下所示:/category1/subcategory1/subcategory2
。
路径段的数量应该灵活,因为我不知道类别的深度。
我得到了使用以下配置和自定义映射器的第一个路径段:
ProductsPlugin:
type: Extbase
limitToPages:
- 5
extension: MyExt
plugin: Products
routes:
-
routePath: '/{category_title}'
_controller: 'Products::list'
_arguments:
category_title: id
defaultController: 'Products::list'
requirements:
category_title: '[0-9]{1..6}'
aspects:
category_title:
type: ProductsValueMapper
映射器如下:
<?php
namespace Vendor\MyExt\Routing\Aspect;
use TYPO3\CMS\Core\Routing\Aspect\PersistedMappableAspectInterface;
use TYPO3\CMS\Core\Site\SiteLanguageAwareTrait;
class ProductsValueMapper implements PersistedMappableAspectInterface
{
use SiteLanguageAwareTrait;
/**
* @param string $value
*
* @return string|null
*/
public function generate(string $value): ?string
{
/**
* returns one or more path segments
* e.g. category1 or category1/subcategory1
*/
return $slug;
}
/**
* @param string $value
*
* @return string|null
*/
public function resolve(string $value): ?string
{
/**
* returns the id of the category from the last path segment
*/
return $id;
}
}
仅对单个类别有效。但是,一旦请求了子类别,代码就会中断。到子类别的链接仅包含子类别的路径段,例如/subcategory1
,但不是该类别之一。
我很清楚为什么会这样,因为我只将子类别的ID添加到LinkViewHelper:<f:link.action controller="Products" action="list" arguments="{id: 5}">Test Link</f:link.action>
。但是我可以
我需要调整哪些螺丝以使URL也可以用于任何深度的子类别?
谢谢!
答案 0 :(得分:1)
您必须允许/
作为要求。默认要求为[^/]+
,并且您仅指定了一个数字。
这应该有效:
ProductsPlugin:
requirements:
category_title: .+
另请参见Symfony-Docs:https://symfony.com/doc/4.1/routing/slash_in_parameter.html