美文网首页
手写一个laravel(四)服务加载

手写一个laravel(四)服务加载

作者: mafa1993 | 来源:发表于2020-11-23 20:45 被阅读0次

    手写一个laravel(四)服务加载

    1. index.php->$app->bind(http/kernel);
    2. kernel =app->make('kerenl',[app]); 注入app,在kenerl使用容器,进行服务的加载
    3. kernel=>handel(request);
    4. Kenerl类中
      • handle 请求处理方法
      • sendRequestThroughRouter 路由处理
      • bootstrap 服务加载,使用bootstrapper =[];数组定义,需要使用app 对服务进行加载

    源码见个人git https://github.com/mafa1993/slaravel

    //Kerenl.php
    <?php
    
    namespace Slaravel\Foundation\Http;
    
    //app/http/kernel的父类, 完成一些服务启动
    
    use Slaravel\Foundation\Application;
    
    class Kernel
    {
        protected $bootstrappers = [
            \Slaravel\Foundation\Bootstrap\RegisterFacade::class,
            \Slaravel\Foundation\Bootstrap\LoadConfig::class,
            \Slaravel\Foundation\Bootstrap\RegisterProviders::class, //服务注册
            \Slaravel\Foundation\Bootstrap\BootProviders::class,  //服务提供者启动
        ];
    
        protected $app;
        public function __construct(Application $app)
        {
            $this->app = $app;
        }
    
        /**
         * 请求处理
         * @param object $request
         */
        public function handle($request=null){
            //通过路由发送请求
            $this->sendRequestThroughRouter($request);
        }
    
        /**
         * 通过路由发送请求
         */
        public function sendRequestThroughRouter($request){
            //引导类启动
            $this->bootstrap();
    
            //請求綁定
            $this->app->instance('request',$request);
    
            //路由分发请求
            $this->app->make('Route')->dispatcher($request);
        }
    
        /**
         * 加载服务
         */
        public function bootstrap(){
            foreach ($this->bootstrappers as $bootstrapper){
                //使用容器获取每一项的实例,然后调用其的bootstrap方法
                $this->app->make($bootstrapper)->bootstrap($this->app);
            }
        }
    
    
    }
    

    相关文章

      网友评论

          本文标题:手写一个laravel(四)服务加载

          本文链接:https://www.haomeiwen.com/subject/gzoviktx.html