美文网首页
手写一个laravel(二)Application实现

手写一个laravel(二)Application实现

作者: mafa1993 | 来源:发表于2020-11-16 20:45 被阅读0次
    1. 入口文件中引入app.php
    2. app.php中创建app的实例
    3. app类定义根目录,继承自容器,可以使用容器的操作
    4. registerBaseBindings 注册基本绑定
    5. registerBaseServiders 注册基本服务提供者
    6. registerContainerAliases 注册容器核心别名
    7. 然后使用其集成容器的功能,绑定Http类、Console类、Exception类
      • 实例化Http Kernel时主要对中间件和中间件组进行了加载
    8. 利用kernel->handle(reuqest = Illuminate\Http\Request::capture()); 对请求进行处理,$requrest是获取请求实例

    三个核心方法 registerBaseBindings registerBaseServiders registerContainerAliases

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2020/11/14 0014
     * Time: 16:05
     */
    //application 类
    
    namespace Slaravel\Foundation;
    
    
    use Slaravel\Container\Container;
    use Slaravel\Support\Facades\Facade;
    
    class Application extends Container
    {
    
        protected $basePath;
        /**
         * Application constructor.
         * @param string $basePath 用于设置项目根目录
         */
        public function __construct($basePath = '')
        {
            if($basePath){
                $this->setBasePath($basePath);
            }
    
            $this->registerBaseBindings();
            //$this->register
    
            //给Facade注入application类,laravel中是封装在了服务中心, 在registerBaseServiders中
            Facade::setFacadeApplication($this);
    
            //注册核心的容器别名
            $this->registerCoreContainerAliases();
        }
    
        /**
         * 设置根目录
         * @param string $basePath
         */
        public function setBasePath($basePath){
            //设置的路径不包含最后一个斜杠
            $this->basePath = rtrim($basePath,'\/');
        }
    
        /**
         * 获取项目根路径
         * @return mixed
         */
        public function getBasePath(){
            return $this->basePath;
        }
    
        /**
         * 绑定自己到容器
         */
        public function registerBaseBindings(){
            $this->instance('app',$this);
        }
    
        /**
         * 核心容器绑定
         */
        public function registerCoreContainerAliases(){
            $binds = [
                'FacadeTest' => \Slaravel\Support\Facades\FacadeTest::class,
                'Config' => \Slaravel\Config\Config::class, //加载配置类
    
            ];
    
            foreach ($binds as $name => $class){
                $this->bind($name,$class);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:手写一个laravel(二)Application实现

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