如何在Laravel 5中间件中创建新请求

时间:2014-10-31 00:43:25

标签: php laravel-5

我有以区域设置为前缀的网址,我想保存本地并修改请求而不重定向它,如何在传递请求之前修改请求?

对于像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。

(这样我们就可以同时使用区域设置和路由注释,并保留原始标题,发布数据等。)**

1 个答案:

答案 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