无法覆盖 Symfony 2 请求中的 pathInfo

car*_*les 0 routing pointer-aliasing symfony

我正在尝试处理别名(友好网址),可能我做得不对。我想要做的是将像“/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;
    }
}
Run Code Online (Sandbox Code Playgroud)

所有逻辑都正常工作并更新原始请求。问题是,即使我更改了“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}
Run Code Online (Sandbox Code Playgroud)

本期相关链接:https : //github.com/symfony/symfony/issues/10478

khu*_*ini 5

我的项目也有类似的问题。我能够更新路径信息,但仍然难以将其传递给后续事件

尝试这个:

$event->getRequest()->server->set('REQUEST_URI', '/en/guestbook');
$event->getRequest()->initialize($event->getRequest()->query->all(), $event->getRequest()->request->all(), $event->getRequest()->attributes->all(), $event->getRequest()->cookies->all(), $event->getRequest()->files->all(), $event->getRequest()->server->all(), $event->getRequest()->getContent());

var_dump($event->getRequest()->getPathInfo());
Run Code Online (Sandbox Code Playgroud)

初始化方法重置整个类。