设为首页 加入收藏

TOP

laravel5.5源码阅读草稿——入口(一)
2019-08-15 23:29:10 】 浏览:42
Tags:laravel5.5 源码 阅读 草稿 入口
laravel的启动需要通过路由、中间件、控制器、模型、视图最后出现在浏览器。而路由、中间件、模型,这些功能都有自己的类,比如Route::any()、DB::table()、$this->middleware()等等,这些功能都是由一个叫IOC(服务容器)的对象来调配的。
它就像框架里的一个管家,我们需要某些功能的时候不需要去自己new、去考虑运行这A对象还需要把哪些对象传入A对象里才能运行了。laravel的index入口文件只管制造一个ioc实例,然后把request对象传入其中。
ioc容器中有一个叫provider的概念,大多数功能都有一个provider,它的作用就是把一个功能需要用到的类,这些类的路径及所需要的一些东西记录起来,在ioc实例化的时候调用其中一些基础服务。ioc在实例化的时候,会把一些基础的provider调用起来,这些基础provider又调用了自身的初始化函数,来实现了一些自动化功能。
 
在public/index.php文件内,laravel首先加载了autoload方法,似乎是通过composer的方式实现的;
 
随后引入bootstrap/app.php文件,文件内实例化了application类,并通过该应用实例注册了Http、Kernel、Handler的共享绑定。
 
 
再看application类,继承自Container类,并继承了ApplicationContract接口(另一个application类,应该是实现了部分系统方法),与http核心接口(这里通过symfony的请求与响应类来实现接口)
 
插一张不知道从哪盗来的Application的继承关系图
 

在laravel把系统基础核心初始化完毕后,便通过application 的 make 方法,传入了http核心的类名来获取别名(在container类的aliases属性中,存储了众多类名与别名的键值对,似乎是通过类名到别名,再到实例的方式来获取的,数组见下方)

 1 container->aliases 
 2 = 
 3 array:64 [▼
 4   "Illuminate\Foundation\Application" => "app"
 5   "Illuminate\Contracts\Container\Container" => "app"
 6   "Illuminate\Contracts\Foundation\Application" => "app"
 7   "Psr\Container\ContainerInterface" => "app"
 8   "Illuminate\Auth\AuthManager" => "auth"
 9   "Illuminate\Contracts\Auth\Factory" => "auth"
10   "Illuminate\Contracts\Auth\Guard" => "auth.driver"
11   "Illuminate\View\Compilers\BladeCompiler" => "blade.compiler"
12   "Illuminate\Cache\CacheManager" => "cache"
13   "Illuminate\Contracts\Cache\Factory" => "cache"
14   "Illuminate\Cache\Repository" => "cache.store"
15   "Illuminate\Contracts\Cache\Repository" => "cache.store"
16   "Illuminate\Config\Repository" => "config"
17   "Illuminate\Contracts\Config\Repository" => "config"
18   "Illuminate\Cookie\CookieJar" => "cookie"
19   "Illuminate\Contracts\Cookie\Factory" => "cookie"
20   "Illuminate\Contracts\Cookie\QueueingFactory" => "cookie"
21   "Illuminate\Encryption\Encrypter" => "encrypter"
22   "Illuminate\Contracts\Encryption\Encrypter" => "encrypter"
23   "Illuminate\Database\DatabaseManager" => "db"
24   "Illuminate\Database\Connection" => "db.connection"
25   "Illuminate\Database\ConnectionInterface" => "db.connection"
26   "Illuminate\Events\Dispatcher" => "events"
27   "Illuminate\Contracts\Events\Dispatcher" => "events"
28   "Illuminate\Filesystem\Filesystem" => "files"
29   "Illuminate\Filesystem\FilesystemManager" => "filesystem"
30   "Illuminate\Contracts\Filesystem\Factory" => "filesystem"
31   "Illuminate\Contracts\Filesyste
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于php得到参数数据 下一篇初步学习正则表达式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目