Yii 1.1 核心配置文件 `protected/config/main.php` 是應用的大腦。本文總結最常用、最關鍵的五大配置板塊,附代碼示例與說明。
<?php
return [
// ...
'defaultController' => 'main', // 默認訪問 MainController
// ...
];
site (即 SiteController)。MainController::actionIndex()。MainController 存在且有 actionIndex。<?php
return [
// ...
'components' => [
'user' => [
'allowAutoLogin' => true, // 支持「記住我」自動登錄
'loginUrl' => ['main/login'], // 未登錄訪問受限頁面時跳轉的路由
],
// ...
],
];
site/login。['controller/action'] 自動生成 URL。<?php
return [
// ...
'components' => [
'db' => [
'connectionString' => 'mysql:host=localhost;dbname=my_db',
'username' => 'root',
'password' => 'secret',
'charset' => 'utf8',
'tablePrefix' => 'tbl_', // 表前綴,AR 自動拼接
'emulatePrepare' => true, // 模擬預處理,兼容舊版驅動
'enableProfiling' => true, // 調試模式下啟用 SQL 分析
'enableParamLogging' => true, // 記錄參數綁定
],
// ...
],
];
Yii::app()->db 獲取 CDbConnection 實例。'db' => require('db.php')。<?php
return [
// ...
'components' => [
'errorHandler' => [
'errorAction' => 'main/error', // 發生錯誤時執行 MainController::actionError()
],
// ...
],
];
actionError(),框架會自動傳遞錯誤信息。YII_DEBUG,友好展示錯誤頁面。<?php
return [
// ...
'modules' => [
'admin', // 簡寫:模塊 ID = 類名 (AdminModule)
'forum' => [ // 完整配置:支持模塊級參數
'class' => 'application.modules.forum.ForumModule',
'defaultController' => 'post',
],
],
];
/admin、/forum 訪問模塊。<?php
return [
'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..',
'name' => 'My Yii Application',
'defaultController' => 'main',
'language' => 'zh_cn',
'sourceLanguage' => 'en_us',
'preload' => ['log'],
'import' => [
'application.models.*',
'application.components.*',
],
'modules' => [
'gii' => [
'class' => 'system.gii.GiiModule',
'password' => '123456',
'ipFilters' => ['127.0.0.1', '::1'],
],
'admin',
],
'components' => [
'db' => [
'connectionString' => 'mysql:host=localhost;dbname=test',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
],
'urlManager' => [
'urlFormat' => 'path',
'showScriptName' => false,
'rules' => [],
],
'user' => [
'allowAutoLogin' => true,
'loginUrl' => ['main/login'],
],
'errorHandler' => [
'errorAction' => 'main/error',
],
'log' => [
'class' => 'CLogRouter',
'routes' => [
['class' => 'CFileLogRoute', 'levels' => 'error, warning'],
['class' => 'CWebLogRoute', 'levels' => 'trace'],
],
],
],
'params' => [
'adminEmail' => 'admin@example.com',
],
];
main.php (主配置)main-local.php (本地覆蓋,Git 忽略,存放敏感信息)modules/xyz/config.phpinit() 中動態修改 Yii::app()->component->property| 問題 | 原因 | 解決 |
|---|---|---|
| 修改 defaultController 不生效 | 控制器類名不匹配 (需 PascalCase + Controller 後綴) | 類名 MainController,文件 MainController.php |
| loginUrl 設置後仍跳轉 site/login | 模塊中未繼承配置,或組件未預加載 | 確保 user 組件在 preload 或組件中正確配置 |
| tablePrefix 不生效 | AR 模型未正確聲明 tableName() | 模型用 return '{{table_name}}'; 雙大括號自動拼接前綴 |
| 模塊無法訪問 | 未在 modules 中註冊,或模塊類路徑錯誤 | 檢查 modules 配置、模塊目錄結構、類名命名空間 |
Yii `main.php` 配置集中了應用的核心行為:**路由入口、用戶認證、數據持久化、錯誤處理、模塊化架構**。掌握這五大板塊,能快速搭建結構清晰、可維護的 Yii 應用。建議將敏感配置 (DB 密碼、API Key) 剝離到 `main-local.php` 並加入 `.gitignore`,實現配置與代碼分離。