将 Lumen 从 5.3 升级到 5.4 会中断路由 - 需要额外的前缀
Upgrading Lumen from 5.3 to 5.4 breaks routing - requires additional prefix
我正在按照 upgrade guide 将 Lumen 应用程序安装到最新版本。升级至 5.4 以下列方式中断路由。
/oauth/test
有一条路线。
它现在导致 404(在 5.3 上没问题):
http://testcase.local/oauth/test
双嵌套路由有效,如下:
http://testcase.local/oauth/oauth/test
稍微复杂一点,因为应用程序的前端(单页 JS)在 apache 后面提供服务,并且基于后端的路由被符号链接进来。但是,apache 已适当配置(FollowSymLinks)并且配置在 5.3 中运行良好。
路由在 php artisan route:list
中正确列出
5.4 中有什么改变来解决这个问题,我该如何解决?
编辑:
原因是 this commit 到 Lumen。
因此 symfony/http-foundation 处理此用例的基于符号链接的路径中断。
解决方法是更改以下方法中的逻辑:
class Application extends \Laravel\Lumen\Application
{
/**
* This override fixes our routing problem
*
*
* Parse the incoming request and return the method and path info.
*
* @param \Symfony\Component\HttpFoundation\Request|null $request
* @return array
*/
protected function parseIncomingRequest($request)
{
if (! $request) {
$request = Request::capture();
}
$this->instance(Request::class, $this->prepareRequest($request));
// need the base url as well as the pathinfo when coming from symlinks
return [$request->getMethod(), '/'.trim($request->getBaseUrl() . $request->getPathInfo(), '/')];
}
}
我正在按照 upgrade guide 将 Lumen 应用程序安装到最新版本。升级至 5.4 以下列方式中断路由。
/oauth/test
有一条路线。
它现在导致 404(在 5.3 上没问题):
http://testcase.local/oauth/test
双嵌套路由有效,如下:
http://testcase.local/oauth/oauth/test
稍微复杂一点,因为应用程序的前端(单页 JS)在 apache 后面提供服务,并且基于后端的路由被符号链接进来。但是,apache 已适当配置(FollowSymLinks)并且配置在 5.3 中运行良好。
路由在 php artisan route:list
5.4 中有什么改变来解决这个问题,我该如何解决?
编辑: 原因是 this commit 到 Lumen。
因此 symfony/http-foundation 处理此用例的基于符号链接的路径中断。
解决方法是更改以下方法中的逻辑:
class Application extends \Laravel\Lumen\Application
{
/**
* This override fixes our routing problem
*
*
* Parse the incoming request and return the method and path info.
*
* @param \Symfony\Component\HttpFoundation\Request|null $request
* @return array
*/
protected function parseIncomingRequest($request)
{
if (! $request) {
$request = Request::capture();
}
$this->instance(Request::class, $this->prepareRequest($request));
// need the base url as well as the pathinfo when coming from symlinks
return [$request->getMethod(), '/'.trim($request->getBaseUrl() . $request->getPathInfo(), '/')];
}
}