扫码关注官方订阅号
session的启动顺序在 controller的构造函数之后。那么如何将session提前启动呢?
人生最曼妙的风景,竟是内心的淡定与从容!
Laravel 的 Session 启动是在中间件中启动的,而中间件又分两种,全局中间件和指派中间件给路由,所谓全局中间件是指 Kernel.php 中 $middleware 里面,每一个 HTTP 请求时都会执行,而指派中间到路由就是 $routeMiddleware 和 $middlewareGroups (这部分只是分配中间件组给路由而已,也是分配给路由了),找到 Kernel.php 父类,IlluminateFoundationHttpKernel::handle 方法就是处理请求的入口了,sendRequestThroughRouter 方法是进行路由分发的,里面的 Pipeline是关键.....然后各种的绕,这部分中间件走完(http全局中间件部分),而 Route 中间件部分则是在 IlluminateRoutingRouter::dispatchToRoute
Session
Kernel.php
$middleware
$routeMiddleware
$middlewareGroups
IlluminateFoundationHttpKernel::handle
sendRequestThroughRouter
Pipeline
Route
IlluminateRoutingRouter::dispatchToRoute
然后发现两种中间件的执行方式却是不同的,但从顺序上面讲确实是 Http 中间件在 Controller 之前,而路由中间件却在之后,先这样,我还要再捋一遍中间件。
Http
Controller
Route::get('/', function (){
//在这里启动
});
Laravel 的 Session 是在 IlluminateSessionMiddlewareStartSession 这个中间件里启动的啊,如果你配置恰当,何来 「session 在 controller 构造函数之后启动」 一说?
IlluminateSessionMiddlewareStartSession
附上测试:
class HomeController extends Controller { public function __construct() { global $app; dd($app['session']); } }
访问首页的输出:
SessionManager {#177 ▼ #app: Application {#3 ▶} #customCreators: [] #drivers: array:1 [▶] }
用中间件来实现你的需求
因为在5.2之后,构造函数在所有的middleware之前执行。所有构造函数中访问不到session
public function __construct() { $this->middleware(function ($request, $next) { //这里访问 session 变量和被认证的用户实例 return $next($request); }); }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Laravel 的

Session启动是在中间件中启动的,而中间件又分两种,全局中间件和指派中间件给路由,所谓全局中间件是指Kernel.php中$middleware里面,每一个 HTTP 请求时都会执行,而指派中间到路由就是$routeMiddleware和$middlewareGroups(这部分只是分配中间件组给路由而已,也是分配给路由了),找到Kernel.php父类,IlluminateFoundationHttpKernel::handle方法就是处理请求的入口了,sendRequestThroughRouter方法是进行路由分发的,里面的Pipeline是关键.....然后各种的绕,这部分中间件走完(http全局中间件部分),而Route中间件部分则是在IlluminateRoutingRouter::dispatchToRoute然后发现两种中间件的执行方式却是不同的,但从顺序上面讲确实是
Http中间件在Controller之前,而路由中间件却在之后,先这样,我还要再捋一遍中间件。Route::get('/', function (){
});
Laravel 的 Session 是在
IlluminateSessionMiddlewareStartSession这个中间件里启动的啊,如果你配置恰当,何来 「session 在 controller 构造函数之后启动」 一说?附上测试:
访问首页的输出:
用中间件来实现你的需求
因为在5.2之后,构造函数在所有的middleware之前执行。所有构造函数中访问不到session