laravel 初始化流程

require __DIR__.'/../bootstrap/autoload.php';

一、 定義 LARAVEL_START 初始時間常量
二、 require __DIR__.'/../vendor/autoload.php'php

這個文件是 Composer 的 class loader , 此文件會註冊 Laravel 中全部的 classes。這樣咱們就不用本身 include class。laravel

三、compile.phpgit

這個文件是把最經常使用的 classes 先 compile 好,有點 cache 的意思。github

四、Patchwork\Utf8\Bootup::initMbstring();bootstrap

這是一個處理 UTF-8 字符串的 Library數組

五、Illuminate\Support\ClassLoader::register();app

由於在最開始就已經使用到 composer 的 ClassLoader ,這個 ClassLoader 是 laravel 自己的 ClassLoader。若是有任何檔案由於任何緣由沒有被 Load 到 Composer ClassLoader 中, 咱們能夠使用這個 ClassLoader 來另外加載到 spl_autoload_register 中。
此外 ClassLoader 能夠用在 application 的任何地方。composer

六、Illuminate\Workbench\Starter::start($workbench);框架

$workbench 爲 workbench 文件夾的路徑。
方法會讀取全部 workbench 中全部文件名爲 autoload.php 而且 require_once 這些 autoload.php。這樣在 Laravel 中就能夠正確的調用在 workbench 文件夾中的擴展包。ide

$app = require_once .../bootstrap/start.php

一、$app = new Illuminate\Foundation\Application

實例化 application 自己。

二、$app->detectEnvironment ( 監測運行環境 )

根據運行環境的 hostname 來讀取對應的 config file

三、$app->bindInstallPaths(require ...'/paths.php');

這行的 paths.php 保存一些經常使用的路徑:

  • public path

  • storage path

  • app path

  • base path

四、$framework = $app['path.base'].'/vendor/laravel/framework/src'

$framework 中存放框架的路徑。

五、require $framework.'/Illuminate/Foundation/start.php;'

讀取框架的 start.php

動態的調整錯誤信息,將全部的 PHP 錯誤都回傳
讀取 mycrypt 擴展
將必須的 classes 都 load 進來

Illuminate\Http\Request Illuminate\Support\Facades\Facade Illuminate\Foundation\AliasLoader Illuminate\Config\EnvironmentVariables Illuminate\Config\Repository

5.1 、$app->instance('app', $app);

將 $app 綁定到 ioc Container 中,instance 方法是將現有的實例跟 ioc 作綁定。

5.二、$app['env'] = $env = $testEnvironment

監測是否爲 phpunit test 執行,若是是的話就讀取正確的配置文件。

5.三、Facade::clearResolvedInstances()跟 Facade::setFacadeApplication($app)

先清除 Facade 中的 Instances
而後再設置 Facade app

5.四、$app->registerCoreContainerAliases();

由於一開始是使用比較短的名字來標識 IoC Container 每個核心的模塊,這裏是將核心模塊用完整名稱來標識,完整的名稱可讓 Dependency Injection 好處理。

5.五、with($envVariable = EnvironmentVariables($app->getEnvironmentVariablesLoader()))->load($env);

讀取全部的 $_ENV 跟 $_SERVER 變量到程序中。

5.六、註冊 Configuration Repository 到 IoC Container 中

5.七、$app->startExceptionHandling();

使用 Laravel 自己的異常處理。

5.八、if($env!= 'testing') ini_set('display_errors', 'off')

關閉 PHP 自己的錯誤處理

5.九、設置程序 timezone

5.十、AliasLoad::getInstance($aliases)->register();

$alias 裏面爲一個數組,鍵爲全部模塊的 alias, 值爲 alias 的完整名稱。 register 全部 alias 到 spl_autoload_register 中。

5.十一、providers = $config['providers']; 跟 $app->getProviderRepository()->load($app, $providers);

讀取全部核心須要的 service providers,好比 Session,Cache…

5.十二、$app->booted(function() use ($app, $env) {...})

這個 booted 方法是給 laravel 一個最後的機會去複寫任何已經存在的 IoC 綁定,這個方法裏面已經預設觸發讀取的一些文件:

global.php{$env}.phproutes.php

相關文章
相關標籤/搜索