laravel框架执行流程是怎样的
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要讲解了"laravel框架执行流程是怎样的",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"laravel框架执行流程是怎样的"吧!1.ind
千家信息网最后更新 2025年11月11日laravel框架执行流程是怎样的
这篇文章主要讲解了"laravel框架执行流程是怎样的",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"laravel框架执行流程是怎样的"吧!
1.index.php
$app = require_once __DIR__.'/../bootstrap/app.php';$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);$response = $kernel->handle( $request = Illuminate\Http\Request::capture());
2.进入app.php
$app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__));$app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class);
Application 类绑定基本类到容器
Kernel 类执行路由分发加载控制器等操作
3.进入 Kernel.php
// 全局路由中间件,每次执行都会执行protected $middleware = [];// 中间件路由分组,protected $middlewareGroups = [];// 中间件别名,可以单独使用也可以分配给组protected $routeMiddleware = [];// 中间件排序protected $middlewarePriority = [];
kernel 类继承 Illuminate\Foundation\Http\Kernel 类
4.进入 Illuminate\Foundation\Http\Kernel 类
//http方法参数覆盖,也就是 X-HTTP-METHOD-OVERRIDE 中有参数,就按照这个里面的走,如果没有,那就是post$request->enableHttpMethodParameterOverride();// 通过中间件/路由器发送给定的请求。$response = $this->sendRequestThroughRouter($request);// 触发事件并呼叫听众 韩注:触发观察者$this->app['events']->dispatch(new Events\RequestHandled($request, $response));return $response;
进入 sendRequestThroughRouter 方法
// 注册请求类到容器中 $this->app->instance('request', $request);// 从facade根实例 中删除共享实例Facade::clearResolvedInstance('request');// 启动引导类 protected $bootstrappers = []; 引导类都在这个数组中$this->bootstrap();// 通过管道模式执行最终结果,切面编程,aop return (new Pipeline($this->app)) // 设置通过管道发送的对象 ->send($request) // 设置管道阵列。 // shouldSkipMiddleware 判断是否应该跳过中间件,$this->make('middleware.disable') 设置为true // $this->bound('middleware.disable') 设置为true 应该可以跳过 所有中间件,不知道这么做的好处是什么? ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware) // 使用最终目标回调运行管道,最终需要运行的结果 ->then($this->dispatchToRouter());进入 dispatchToRouter 路由分发 ,最终由路由类中 dispatch 执行路由,并实现注入
$this->router->dispatch($request);
利用反射原理实现依赖注入 Illuminate\Container\Container 类中
public function make($abstract, array $parameters = []){ return $this->resolve($abstract, $parameters);}public function build($concrete)// build 中$reflector = new ReflectionClass($concrete);依赖注入通过 $parameter->getClass() 知道是什么类
class Demo{ public function store(Request $req333, $abc){ }}class Request{}$method = new ReflectionMethod('Demo', 'store');foreach ($method->getParameters() as $parameter) { // 获取参数的限制类的类型 $param_type = $param->getClass(); //获取当前注入对象的类型提示 $param_value = $param->getName(); //获取参数名称 if ($param_type) { // 通过类的类型限制名称中提取容器中的实例 $avgs[] = $app[$param_type->name]; }}$reflect->invokeArgs($app['demo'], $avgs);感谢各位的阅读,以上就是"laravel框架执行流程是怎样的"的内容了,经过本文的学习后,相信大家对laravel框架执行流程是怎样的这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
中间件
路由
框架
流程
参数
管道
实例
容器
类型
学习
内容
名称
对象
就是
方法
结果
运行
限制
也就是
事件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发招标属于哪类
东平app软件开发多少钱
网络安全国能e购
tbc服务器不排队
工业网络技术的认识
关于网络技术参考文献
软件开发企业的资质有哪些
高可用数据库mysql部署
通信和软件开发
怀旧服开pve服务器
玩alex连哪个服务器快
申请网络安全工程师
浙江服务器电源咨询
网络安全预警 发展趋势
服务器怎么藏东西我的世界
眉山市软件开发项目
link操作关系数据库
芜湖时间图网络技术
阿里云服务器机房
新网络安全法2017内容
怎么把网络安全识别关闭
c 连接数据库表
在数据库中给字段赋值
计算机等级考试网络技术考点
北京网络软件开发排名
网络安全审计报告时啥
服务器jvm默认最大内存
软件开发商正航软件
易语言上传文件至服务器源码
软件开发和基层技术区别