首页 > 其他 > 详细

laravel生命周期

时间:2020-10-14 14:26:22      阅读:40      评论:0      收藏:0      [点我收藏+]

一,入口文件

index.php
bootstrap/autoload.php      --> 自动加载
bootstrap/app.php           --> 初始化服务容器(注册基础的服务提供者(事件、日志、路由)、注册核心类别名)
bootstrap/app.php           --> 注册共享的Kernel和异常处理器
Foundation\Http\Kernel.php  --> 处理请求和响应
index.php                   --> 将响应信息发送到浏览器
index.php                   --> 处理继承自TerminableMiddleware接口的中间件(Session)并结束应用生命周期

二,自动加载

1,包括全局函数的加载、顶级命名空间映射、PSR0、PSR4标准的实现

#核心加载类:
$loader = new \Composer\Autoload\ClassLoader();
#核心查找方法:
loadClass()->findFile()

#PSR0的类和路径映射
autoload_namespaces.php

#PSR4的类和路径映射
autoload_psr4.php

#具体类和路径映射
autoload_classmap.php

#其他自动加载的php文件 (一次性全部加载非自动)
autoload_files.php

注意:命名空间本质上是一种规范:更加细致的管理类(使用namespace),选择类(使用use)和加载类(通过命名空间和路径的建立映射关系,动态加载)

三,服务容器

#核心类
$app
= new Illuminate\Foundation\Application(path) #继承自Illuminate\Container\Container

#核心机制
1,反射
2,class_alias //核心类别名

构造方法中初始化

$this->registerBaseBindings();//绑定自身实例

$this->registerBaseServiceProviders();//基础服务  
        //事件机制
        $this->register(new EventServiceProvider($this));
        //日志服务
        $this->register(new LogServiceProvider($this));
        //路由服务
        $this->register(new RoutingServiceProvider($this));//注册了路由

$this->registerCoreContainerAliases();//别名机制可以使门面类对应到实例

实例对象注册了3个类

//http服务的核心类
$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);
//命令行:php artisan 的功能
$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);
//异常处理类
$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

四,生命周期核心类:App\http\Kernel

#实例核心类:
$app
->make(Illuminate\Contracts\Http\Kernel::class); #继承自Illuminate\Foundation\Http\Kernel

构造函数初始化

#绑定应用类
$this->app = $app;

#绑定路由
$this->router = $router;

#自带全局中间件
protected $middleware=[...]

#设置路由中间件
//前置中间件
$router->middlewarePriority = $this->middlewarePriority;
//中间件组
$router->middlewareGroup($key, $middleware);
//中间件别名
$router->aliasMiddleware($key, $middleware);

handle()方法

#调用
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);
#具体逻辑 $this->app->instance(‘request‘, $request); Facade::clearResolvedInstance(‘request‘); $this->bootstrap(); return (new Pipeline($this->app)) ->send($request) ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware) ->then($this->dispatchToRouter());

 

 

 

 

 

 

loadClass

laravel生命周期

原文:https://www.cnblogs.com/tkzc2013/p/13814153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!