2

我有以语言环境为前缀的 url,我想保存本地并修改请求而不重定向它,如何在传递请求之前修改请求?

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

(这样我们就可以同时使用语言环境和路由注释,并且仍然保留原始标题、发布数据等)**

4

1 回答 1

3

Laravel Request 类有一个duplicate()方法允许你创建一个重复的请求并覆盖它的某些部分

底层 Symfony 请求检查服务器变量和标头以确定prepareRequestUri().

似乎覆盖REQUEST_URI请求上的服务器变量($serverduplicate()方法上)应该可以帮助您在没有语言环境片段的情况下重写 URL。但是,这似乎是一个非常 hack-ish 的解决方案


参考:https ://github.com/laravel/framework/blob/master/src/Illuminate/Http/Request.php#L613

于 2014-12-15T19:46:45.827 回答