Yii - 入口指令碼



入口指令碼負責啟動請求處理週期。它們只是使用者可以訪問的 PHP 指令碼。

下圖顯示了應用程式的結構:

Entry Scripts Structure

Web 應用程式(以及控制檯應用程式)只有一個入口指令碼。終端使用者向入口指令碼發出請求。然後,入口指令碼例項化應用程式例項並將請求轉發給它們。

控制檯應用程式的入口指令碼通常儲存在專案基路徑下,並命名為 **yii.php**。Web 應用程式的入口指令碼必須儲存在 Web 可訪問的目錄下。它通常被稱為 **index.php**。

入口指令碼執行以下操作:

  • 定義常量。
  • 註冊 Composer 自動載入器。
  • 包含 Yii 檔案。
  • 載入配置。
  • 建立和配置應用程式例項。
  • 處理傳入的請求。

以下是 **基本應用程式** 模板的入口指令碼:

<?php
   //defining global constants
   defined('YII_DEBUG') or define('YII_DEBUG', true);
   defined('YII_ENV') or define('YII_ENV', 'dev');
 
   //register composer autoloader
   require(__DIR__ . '/../vendor/autoload.php');
   //include yii files
   require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
  
   //load application config
   $config = require(__DIR__ . '/../config/web.php');
  
   //create, config, and process reques
   (new yii\web\Application($config))->run();
?>

以下是 **控制檯** 應用程式的入口指令碼:

#!/usr/bin/env php
<?php
   /** 
   * Yii console bootstrap file. 
   * @link http://www.yiiframework.com/ 
   * @copyright Copyright (c) 2008 Yii Software LLC 
   * @license http://www.yiiframework.com/license/ 
   */
   //defining global constants
   defined('YII_DEBUG') or define('YII_DEBUG', true);
  
   //register composer autoloader
   require(__DIR__ . '/vendor/autoload.php');
   require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
  
   //load config
   $config = require(__DIR__ . '/config/console.php');
  
   //apply config the application instance 
   $application = new yii\console\Application($config);  

   //process request
   $exitCode = $application->run();
   exit($exitCode);
?>

定義全域性常量的最佳位置是入口指令碼。Yii 支援三個常量:

  • **YII_DEBUG** - 定義是否處於除錯模式。如果設定為 true,我們將看到更多日誌資料和詳細的錯誤呼叫堆疊。

  • **YII_ENV** - 定義環境模式。預設值為 prod。可用值為 prod、dev 和 test。它們用於配置檔案中定義不同的資料庫連線(本地和遠端)或其他值。

  • **YII_ENABLE_ERROR_HANDLER** - 指定是否啟用預設的 Yii 錯誤處理程式。

要定義全域性常量,使用以下程式碼:

//defining global constants 
defined('YII_DEBUG') or define('YII_DEBUG', true); 
which is equivalent to: 
if(!defined('YII_DEBUG')) { 
   define('YII_DEBUG', true); 
} 

**注意** - 為了在包含其他 PHP 檔案時生效,全域性常量應該在入口指令碼的開頭定義。

廣告