我正在尝试处理别名(友好网址),可能我做得不对。我想要做的是将'/blog/my-post-about-something'之类的网址转换为'/posts/23'。
我为 kernel.request 事件编写了一个监听器,它进行一些操作并修改原始请求
class RequestListener
{
public function onKernelRequest(KernelEvent $event)
{
$request = $event->getRequest();
$converted_path = $this->getPathIfAny($request);
if ($converted_path) {
$request->server->set('REQUEST_URI', $converted_path);
}
}
public function getPathIfAny(Request $request)
{
return $somePathOrNull;
}
}
所有逻辑都正常工作并更新原始请求。问题是,即使我更改了“REQUEST_URI”,属性 $pathInfo 仍然保持不变并指向上一个路径,所以我不断收到 404 错误。
有什么方法可以完全覆盖 uri,还是我应该尝试以不同的方式解决问题?
这是监听器定义
my_cmf.request_listener:
class: My\CMFBundle\Event\RequestListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest , priority: -10}