【问题标题】:How can I create a new Request in Laravel 5 Middleware如何在 Laravel 5 中间件中创建新请求
【发布时间】:2014-10-31 00:43:25
【问题描述】:

我有以 locale 为前缀的 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。

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

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

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

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

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


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

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 2018-05-15
      • 1970-01-01
      • 2015-09-21
      相关资源
      最近更新 更多