前一段時(shí)間,嘗試去寫(xiě)一個(gè) php 的簡(jiǎn)單框架,發(fā)現(xiàn)自己還欠缺很多,就暫時(shí)停掉了。準(zhǔn)備先讀完 Yii2 的源碼,然后再去看完 laravel 的源碼,最后再繼續(xù)去寫(xiě)這個(gè)簡(jiǎn)單的 php 框架。
之后關(guān)于 Yii2 的學(xué)習(xí)暫時(shí)都是以basic 的項(xiàng)目為例。
我們先來(lái)看一下 Yii2 的入口文件。在配置 Yii2 的 nginx 的配置時(shí),有這樣幾句
# 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 文件的內(nèi)容如下:
<?php// comment out the following two lines when deployed to production// 定義 debug 的標(biāo)記defined('YII_DEBUG') or define('YII_DEBUG', true);// 定義環(huán)境,有 'dev' 和 'prod' 兩種defined('YII_ENV') or define('YII_ENV', 'dev');// 引入 vendor 中的 autoload.php 文件,會(huì)基于 composer 的機(jī)制自動(dòng)加載類(lèi)require(__DIR__ . '/../vendor/autoload.php');// 引入 Yii 框架的文件 Yii.phprequire(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');// 引入 web 的 config 文件,并將返回值即配置項(xiàng)放入 $config 變量中$config = require(__DIR__ . '/../config/web.php');// new 一個(gè) yiiwebApplication 的實(shí)例,并執(zhí)行它的 run 方法// 用 $config 作為 yiiwebApplication 初始化的參數(shù)(new yiiwebApplication($config))->run();
可以看到其核心代碼,就只有最后一句,我們所有的請(qǐng)求的處理都是通過(guò) run 方法去調(diào)用執(zhí)行的,內(nèi)部的具體內(nèi)容之后會(huì)講解。
Yii2 其實(shí)還有另外一個(gè)入口,是 Yii2 命令行的入口文件,即頂級(jí)目錄下的 yii 文件。
yii 文件的內(nèi)容如下:
#!/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 文件,并將返回值即配置項(xiàng)放入 $config 變量中$config = require(__DIR__ . '/config/console.php');// new 一個(gè) yiiconsoleApplication 的實(shí)例,并執(zhí)行它的 run 方法// 用 $config 作為 yiiconsoleApplication 初始化的參數(shù)$application = new yiiconsoleApplication($config);$exitCode = $application->run();// 退出exit($exitCode);
與 index.php 文件最大的區(qū)別在于,它使用的是yiiconsoleApplication 類(lèi),而 index.php 中使用的yiiwebApplication。
這就是 Yii2 的兩個(gè)入口,如果是 advanced 的項(xiàng)目的話,入口會(huì)更多,但基本內(nèi)容都是這兩種形式之一。
今天只是一個(gè)簡(jiǎn)單的開(kāi)篇,就先到這里。
對(duì) Yii2 源碼有興趣的同學(xué)可以關(guān)注項(xiàng)目yii2-2.0.3-annotated,現(xiàn)在在上面已經(jīng)添加了不少關(guān)于 Yii2 源碼的注釋,之后還會(huì)繼續(xù)添加~
有興趣的同學(xué)也可以參與進(jìn)來(lái),提交Yii2 源碼的注釋。
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選