laravel生命周期
2017-07-01 16:33:41 10 举报
AI智能生成
php laravel 框架的生命周期图 从入口文件 index.php 到核心类 httpKernel 对象,再到response对象的创建,发送,整个过程,基于 laravel 5.2 部分细节待优化
作者其他创作
大纲/内容
index.php
引入 <span>bootstrap/autoload.php</span>
引入 composer自动加载
create kernel( \Illuminate\Foundation\Http\Kernel )
call handle
call sendRequestThroughRouter
<pre>$this->bootstrap</pre>
初始化
<pre><span>bootstrapWith</span></pre>
<pre><span>'Illuminate\Foundation\Bootstrap\DetectEnvironment'</span><span>,<br></span><span>'Illuminate\Foundation\Bootstrap\LoadConfiguration'</span><span>,<br></span><span>'Illuminate\Foundation\Bootstrap\ConfigureLogging'</span><span>,<br></span><span>'Illuminate\Foundation\Bootstrap\HandleExceptions'</span><span>,<br></span><span>'Illuminate\Foundation\Bootstrap\RegisterFacades'</span><span>,<br></span><span>'Illuminate\Foundation\Bootstrap\RegisterProviders'</span><span>,<br></span><span>'Illuminate\Foundation\Bootstrap\BootProviders'</span><span>,</span></pre>
<pre><span>DetectEnvironment</span></pre>
\Dotenv\Dotenv::load
<pre><span>setEnvironmentVariable</span></pre>
加载 .env 文件配置到环境变量 $_SERVER数组 $_ENV 数组
调用<span>apache_setenv</span>
调用<span>putenv</span>
windows下存在BUG
一次put没完成 第二次put时会失败,对应页面卡的时候刷新第二次 读取不到值
值为UTF编码一个中文字符时设置失败
<pre>BootProviders</pre>
加载所有用户自定义Provider
\App\Providers\RouteServiceProvider
map
指定路由文件路径
App::<span>bootstrapWith</span>
循环调用各Bootstrap 对象的 <span>bootstrap 方法</span>
<pre><span>$this</span><span>->dispatchToRouter</span></pre>
跳转到路由
<pre><span>$this</span><span>-></span><span>app</span><span>->instance(</span><span>'request'</span><span>, </span><span>$request</span><span>);</span></pre>
初始化request
App: \Illuminate\Foundation\Application
<pre><span>$this</span><span>-></span><span>router</span><span>->dispatch(</span><span>$request</span><span>);</span></pre>
Route: \Illuminate\Routing\Router
Router::<span>dispatchToRoute</span>
<pre><pre>findRoute</pre></pre>
创建Route对象
注入到 <span>$this</span><span>-></span><span>container</span>
处理路由用户代码
<pre><pre><pre>\Illuminate\Routing\Route::run<br></pre></pre></pre>
调用必包
<pre><span>$this</span><span>->runCallable</span></pre>
调用控制器
<pre><span>$this</span><span>->runController</span></pre>
<pre><span>runRouteWithinStack</span></pre>
创建中间件
<pre><span>gatherRouteMiddlewares</span></pre>
调用路由处理
<pre><span>$route</span><span>->run(</span><span>$request</span><span>)</span></pre>
<pre><span>prepareResponse</span></pre>
添加http头
<pre><pre><span>$response</span><span>->prepare(</span><span>$request</span><span>)</span></pre></pre>
得到response对象
\Illuminate\Http\Response
response::send
kernel::<span>terminate</span>
调用所有中间件的terminate方法
0 条评论
下一页