【问题标题】:Laravel middleware does not work when set as global middlewareLaravel 中间件在设置为全局中间件时不起作用
【发布时间】:2016-07-29 17:10:30
【问题描述】:

我有一个中间件,通过在每次请求之前从会话中获取值来设置我的 laravel 应用程序的语言环境。

我有一个设置这个变量的路由,我把这个中间件应用到所有路由,包括这个。

这是我的中间件:

namespace App\Http\Middleware;

use App;
use Closure;
use Session;

class LocaleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Session::has('locale')){
            App::setLocale(Session::get('locale'));
        }

        return $next($request);
    }
}

这是我设置语言的途径

public function setLang(string $lang)
{
    Session::put('locale', $lang);

    return back();
}

现在问题来了。如果我将该中间件设置为全局,在内核文件中,它不会生效。区域设置不正确。

如果我手动将该中间件应用到每条路由,它就可以工作。

如果我将该中间件分配给 web 中间件组,在内核文件中,它会自动应用于所有路由,它也可以工作。

这让我很困惑。请与我分享您的建议!谢谢:)

【问题讨论】:

  • 愚蠢的问题。您是否在 Kernel.php 内部添加了中间件数组?
  • 发布您的kernel.php
  • 我刚才在问题中说了什么?如果我将中间件设为全局,在内核中,它不起作用。如果我将中间件分配给内核中的 web 组,它可以工作跨度>

标签: php laravel-5.2 middleware


【解决方案1】:

我终于找到了答案。

负责启动会话的中间件不是全局中间件,它只在web中间件组中。因此,laravel无法访问会话,因为我的中间件在它们启动之前就已经运行了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多