我有以区域设置为前缀的网址,我想保存本地并修改请求而不重定向它,如何在传递请求之前修改请求?
对于像site.com/en/someurl这样的网址
class GetLocale implements Middleware {
public function handle($request, Closure $next)
{
$segment = Request::segment(1); // 'en'
if( is_valid_language($segment) ){
// remove local from the request url
// do something to remove the local and continue
// as if the url was site.com/someurl
return $next($request);
}
return $next($request);
}
}
GetLocale运行后,网站的其余部分应完全忽略该区域设置,并且只能看到site.com/someurl。
(这样我们就可以同时使用区域设置和路由注释,并保留原始标题,发布数据等。)**
答案 0 :(得分:2)
Laravel Request类有一个duplicate()
方法,允许您创建重复请求并覆盖它的某些部分
底层Symfony请求检查服务器变量和标头,以确定prepareRequestUri()
上的请求URL。
似乎覆盖请求上的REQUEST_URI
服务器变量($server
方法上的duplicate()
)应该可以帮助您重写没有区域设置片段的URL。然而,这似乎是一个非常黑客的解决方案
参考:https://github.com/laravel/framework/blob/master/src/Illuminate/Http/Request.php#L613