问题描述
以前我没有实现自定义映射器的 URL 如下所示: https:\mydomain.com?tx_myextension%5Baction%5D=boat-action&tx_myextension%5BboatId%5D=boat-id&tx_myextension%5BboatName%5D=boat-name&tx_myextension%5Bcontroller%5D=boat-controller&cHash=hash
在通过扩展自定义方面实现自定义 URL 映射器之后,我达到了这个解决方案: https:\mydomain.com/boat-name/boat-id
我想要实现的是从 URL 中隐藏 boat-id,该 ID 未存储在表中,并且需要从页面加载数据。
<f:link.action
class="call-to-action horizontal"
action=“boat-action”
controller=“boat-controller”
arguments="{
boatId: '{boat.id}',boatName: '{boat.urlName}'
}"
pageUid="218"
>
config.yaml
routeEnhancers:
BoatName:
type: Extbase
limitToPages:
- 218
extension: myextension
plugin: Singleboat
routes:
- routePath: '/{boatName}/{boatId}'
_controller: Boat::boat-controller
aspects:
boatId:
type: BoatNameMapper
boatName:
type: BoatNameMapper
自定义映射器类
class BoatNameMapper implements StaticMappableAspectInterface
{
use SiteLanguageAwareTrait;
/**
* {@inheritdoc}
*/
public function generate(string $value): ?string
{
return $value !== false ? (string)$value : null;
}
/**
* {@inheritdoc}
*/
public function resolve(string $value): ?string
{
return isset($value) ? (string)$value : null;
}
}
解决方法
如果你想在 URL 中输入你的船 ID,不要把它放进去。(config.yaml)
特别是:让您的控制器独立于船 ID。否则,您需要在 URL 中使用它。
也许可以接受的解决方案是另一种船名和船 ID。
关于:- routePath: '/{boatName}-{boatId}