Yii2 の徹底学習 - エントリーファイル
少し前に、簡単な PHP フレームワークを書こうとしたのですが、まだ足りないことが多くて一旦中断しました。最初に Yii2 のソース コードを読み、次に laravel のソース コードを読み、最後にこの単純な PHP フレームワークを書き続ける予定です。
これから Yii2 の研究は、例として基本的なプロジェクトに基づいて行われます。
まずYii2のエントリーファイルを見てみましょう。 Yii2 の nginx 設定を行う際に、
<span style="color: #000000;"> # server_name mysite.local; root </span>/path/to/basic/<span style="color: #000000;">web; ...... location </span>/<span style="color: #000000;"> { # Redirect everything that isn</span><span style="color: #800000;">'</span><span style="color: #800000;">t a real file to index.php</span> try_files $uri $uri/ /index.php?<span style="color: #000000;">$args; }</span>
のような文がいくつかあります。Web のエントリ ファイルが、index.php ファイルであることがわかります。ウェブフォルダー。
index.php ファイルの内容は次のとおりです。
<?<span style="color: #000000;">php</span><span style="color: #008000;">//</span><span style="color: #008000;"> comment out the following two lines when deployed to production// 定义 debug 的标记</span><span style="color: #008080;">defined</span>('YII_DEBUG') or <span style="color: #008080;">define</span>('YII_DEBUG', <span style="color: #0000ff;">true</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 定义环境,有 'dev' 和 'prod' 两种</span><span style="color: #008080;">defined</span>('YII_ENV') or <span style="color: #008080;">define</span>('YII_ENV', 'dev'<span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 引入 vendor 中的 autoload.php 文件,会基于 composer 的机制自动加载类</span><span style="color: #0000ff;">require</span>(__DIR__ . '/../vendor/autoload.php'<span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 引入 Yii 框架的文件 Yii.php</span><span style="color: #0000ff;">require</span>(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'<span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 引入 web 的 config 文件,并将返回值即配置项放入 $config 变量中</span><span style="color: #800080;">$config</span> = <span style="color: #0000ff;">require</span>(__DIR__ . '/../config/web.php'<span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> new 一个 yii\web\Application 的实例,并执行它的 run 方法// 用 $config 作为 yii\web\Application 初始化的参数</span>(<span style="color: #0000ff;">new</span> yii\web\Application(<span style="color: #800080;">$config</span>))->run();
コア コード、最後の文、処理のみを確認できます。すべてのリクエストはすべて run メソッドを通じて呼び出され、実行されます。具体的な内部コンテンツについては後で説明します。
Yii2 には実際にはもう 1 つの入り口があります。それは Yii2 コマンドラインのエントリーファイル、つまり最上位ディレクトリにある yii ファイルです。
yii ファイルの内容は次のとおりです。
<span style="color: #008000;">#</span><span style="color: #008000;">!/usr/bin/env php</span><?<span style="color: #000000;">php</span><span style="color: #008080;">defined</span>('YII_DEBUG') or <span style="color: #008080;">define</span>('YII_DEBUG', <span style="color: #0000ff;">true</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> fcgi doesn't have STDIN and STDOUT defined by default// 定义 STDIN 和 STDOUT</span><span style="color: #008080;">defined</span>('STDIN') or <span style="color: #008080;">define</span>('STDIN', <span style="color: #008080;">fopen</span>('php://stdin', 'r'<span style="color: #000000;">));</span><span style="color: #008080;">defined</span>('STDOUT') or <span style="color: #008080;">define</span>('STDOUT', <span style="color: #008080;">fopen</span>('php://stdout', 'w'<span style="color: #000000;">));</span><span style="color: #0000ff;">require</span>(__DIR__ . '/vendor/autoload.php'<span style="color: #000000;">);</span><span style="color: #0000ff;">require</span>(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'<span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 引入 console 的 config 文件,并将返回值即配置项放入 $config 变量中</span><span style="color: #800080;">$config</span> = <span style="color: #0000ff;">require</span>(__DIR__ . '/config/console.php'<span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;"> new 一个 yii\console\Application 的实例,并执行它的 run 方法// 用 $config 作为 yii\console\Application 初始化的参数</span><span style="color: #800080;">$application</span> = <span style="color: #0000ff;">new</span> yii\console\Application(<span style="color: #800080;">$config</span><span style="color: #000000;">);</span><span style="color: #800080;">$exitCode</span> = <span style="color: #800080;">$application</span>-><span style="color: #000000;">run();</span><span style="color: #008000;">//</span><span style="color: #008000;"> 退出</span><span style="color: #0000ff;">exit</span>(<span style="color: #800080;">$exitCode</span>);
index.php ファイルとの最大の違いは、yiiconsoleApplication クラスを使用するのに対し、index.php ファイルは yiiconsoleApplication クラスを使用することです。 .php は yiiwebApplication を使用します。
Yii2 への入り口は 2 つあり、高度なプロジェクトであればさらに多くの入り口がありますが、基本的な内容はこの 2 つの形式のいずれかになります。
今日は簡単なオープニングなのでこの辺で。
Yii2 ソース コードに興味がある学生は、Yii2-2.0.3-annotated のプロジェクトに注目してください。Yii2 ソース コードに関する多くのコメントが追加されています。 、今後も追加され続ける予定です~
興味のある学生も参加して、Yii2 ソース コードにコメントを送信できます。