laravel 核心类Kernel

vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php。是laravel处理网络请求的最核心类,在app容器准备好了之后,就会调用本类,之后所有的处理都在此类中。

 

 初始化

  1. 调用router,因为router已经中app中注册,所以,直接make就行。

  2. 添加middleware,首先添加如下默认的middleware:

                $middlewarePriority = [
                \Illuminate\Session\Middleware\StartSession::class,
                \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                \Illuminate\Auth\Middleware\Authenticate::class,
                \Illuminate\Session\Middleware\AuthenticateSession::class,
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
                \Illuminate\Auth\Middleware\Authorize::class,
            ];

 3. 添加其他的middlerware,进router,所有middleware以及middlewaregroup都加到router中。

 

处理request,通过handler函数处理

1. 处理前需要的类初始化,bootstrap

2. 把传入的request送到middleware,然后传递到router。处理结束。

 

 

 bootstrap,调用app的bootstrapWith初始化整个请求需要的的环境:

    bootarp: 启动的时候需要实例化并运行的类

            \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
            \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
            \Illuminate\Foundation\Bootstrap\HandleExceptions::class,
            \Illuminate\Foundation\Bootstrap\RegisterFacades::class,
            \Illuminate\Foundation\Bootstrap\SetRequestForConsole::class,
            \Illuminate\Foundation\Bootstrap\RegisterProviders::class,
            \Illuminate\Foundation\Bootstrap\BootProviders::class,

     LoadEnvironmentVariables
    初始化环境变量文件(根目录下的.env文件),具体加载那几个文件,取决于几个条件:1.环境变量文件夹的路径设置(在app中设置) 2.控制台可以用—env参数,非控制台用APP_ENV环境变量,决定文件的后缀

    设置是通过 vendor/vlucas/phpdotenv/src/Dotenv.php加载到环境变量中:
    $_ENV[$name] = $value;
          $_SERVER[$name] = $value;

  LoadConfiguration.php

    添加config 实例,并且读取config文件夹下的所有文件,初始化对象,注入到容器中,后续就可以直接用config简称调用了。

 

  HandleExceptions.php

    异常和错误处理,错误都转化成异常,异常调用容器中注册的ExceptionHandler来处理。

           注册用的系统函数:
          set_error_handler([$this, 'handleError']);
          set_exception_handler([$this, 'handleException']);

 

  RegisterFacades.php

           把配置文件app里面的app.aliases注册成门面

    注册是通过类:vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php

     这册门面是用php的spl_autoload_register实现的注册自动加载函数,而自动加载函数调用class_alias将别名跟实际类绑定实现。实际类都继承自门面类

    vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php

    门面类的作用,直接调用容器中的绑定,生成相应的类实例,并且通过类的实例,调用相应的方法。

    所以,门面类,功能就是把容器中的类,提供了一个直接访问的别名,其实跟容器中的别名没有太大区别,只是把访问方式变了而已。

 

  RegisterProviders.php

    直接调用app中的registerConfiguredProviders,注册app配置文件中的providers,同时注册PackageManifest中的providers。

 

  BootProviders.php

    运行所有provider的boot

 

所以,kernel整个功能就是:

1. 初始化针对网站配置的环境。

2. 添加meddlerware功能

3. 配置router,并把请求发送到router

转载于:https://www.cnblogs.com/yxzamy/p/7614589.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值