前一段時間,嘗試去寫一個 php 的簡單框架,發現自己還欠缺很多,就暫時停掉了。準備先讀完 Yii2 的源碼,然后再去看完 laravel 的源碼,最后再繼續去寫這個簡單的 php 框架。
之后關于 Yii2 的學習暫時都是以basic 的項目為例。
我們先來看一下 Yii2 的入口文件。在配置 Yii2 的 nginx 的配置時,有這樣幾句
# server_name mysite.local; root /path/to/basic/web; ...... location / { # Redirect everything that isn't a real file to index.php try_files $uri $uri/ /index.php?$args; }
可以看到web的入口文件是 web 文件夾下的 index.php 文件。
index.php 文件的內容如下:
<?php// comment out the following two lines when deployed to production// 定義 debug 的標記defined('YII_DEBUG') or define('YII_DEBUG', true);// 定義環境,有 'dev' 和 'prod' 兩種defined('YII_ENV') or define('YII_ENV', 'dev');// 引入 vendor 中的 autoload.php 文件,會基于 composer 的機制自動加載類require(__DIR__ . '/../vendor/autoload.php');// 引入 Yii 框架的文件 Yii.phprequire(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');// 引入 web 的 config 文件,并將返回值即配置項放入 $config 變量中$config = require(__DIR__ . '/../config/web.php');// new 一個 yiiwebApplication 的實例,并執行它的 run 方法// 用 $config 作為 yiiwebApplication 初始化的參數(new yiiwebApplication($config))->run();
可以看到其核心代碼,就只有最后一句,我們所有的請求的處理都是通過 run 方法去調用執行的,內部的具體內容之后會講解。
Yii2 其實還有另外一個入口,是 Yii2 命令行的入口文件,即頂級目錄下的 yii 文件。
yii 文件的內容如下:
#!/usr/bin/env php<?phpdefined('YII_DEBUG') or define('YII_DEBUG', true);// fcgi doesn't have STDIN and STDOUT defined by default// 定義 STDIN 和 STDOUTdefined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));require(__DIR__ . '/vendor/autoload.php');require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');// 引入 console 的 config 文件,并將返回值即配置項放入 $config 變量中$config = require(__DIR__ . '/config/console.php');// new 一個 yiiconsoleApplication 的實例,并執行它的 run 方法// 用 $config 作為 yiiconsoleApplication 初始化的參數$application = new yiiconsoleApplication($config);$exitCode = $application->run();// 退出exit($exitCode);
與 index.php 文件最大的區別在于,它使用的是yiiconsoleApplication 類,而 index.php 中使用的yiiwebApplication。
這就是 Yii2 的兩個入口,如果是 advanced 的項目的話,入口會更多,但基本內容都是這兩種形式之一。
今天只是一個簡單的開篇,就先到這里。
對 Yii2 源碼有興趣的同學可以關注項目yii2-2.0.3-annotated,現在在上面已經添加了不少關于 Yii2 源碼的注釋,之后還會繼續添加~
有興趣的同學也可以參與進來,提交Yii2 源碼的注釋。
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答