這幾天了解了一下Yii框架,以簡單的博客項目實戰入門。大致的實現流程做個記錄。
一、Yii 安裝與環境檢測
從 www.yiiframework.com 獲取一份Yii的拷貝,解壓到 /wwwroot/yii 目錄。
打開瀏覽器訪問 http://127.0.0.1/yii/requirements/index.php,檢測本地環境支持。
二、建立項目與目錄介紹
在命令行環境,cd命令進入到 Yii 框架核心目錄 /wwwroot/yii/framework ,鍵入命令行: php yiic webapp ../blog (注意:確保php.exe的路徑配置到環境變量)
回車后,得到一條確認提示,yes 確定即可。這時在 yii 目錄下有了blog 目錄,結構如下:

assets: 公共資源目錄,存放JS,CSS,圖片資源等等 protected:書寫MVC代碼的主要目錄 themes:主題目錄 uploads:這個是我自己添加的圖片上傳目錄 .htaccess: 用於Apache重寫 index-text.php:功能測試的入口文件,沒用 index.php:單入口文件
三、設置默認控制器與載入模板
1、創建控制器
class IndexController extends Controller{
public function actionIndex() {
//...
}
}
訪問:index.php?r=index/index
r是 route 路由的縮寫,/ 分隔 index 控制器和 index 方法
2、配置默認控制器
默認訪問:控制器SiteController下面的actionIndex方法
Config/main.php是主配置文件,在其中加入:
'defaultController' => 'Index',
3、載入視圖
在控制器方法中,有兩個方法可以加載視圖:
$this->render(); // 會加載布局文件 $this->renderPartial(); // 不會加載布局文件(也不能加載框架自帶的jQuery等)
方法中傳遞視圖文件名(YII 1.1.17 中的控制器方法名以 "action" 為前綴,比如 "actionIndex" )
在視圖目錄:
根據控制器名字建立文件夾,里面的文件名是 render 或者 renderPartial 方法傳遞的名字
例如:
控制器是 Index ,則需要建立 Index 文件夾,在 Index 文件夾下建立 index.php 文件,然后渲染視圖
$this->render('index');
// 或者
$this->renderPartial('index');
四、布局介紹
1、什么是局部
在 views/layouts 下面的文件是布局文件(有每個模板的公共區域),用 render() 方法渲染視圖時會自動加載的文件
修改步驟:
- views/layouts下面的,新建布局文件
- 修改默認布局文件:
位置: components/Controller.php ,基類控制器
修改屬性, public $layout = '//layouts/column1';
這表示使用 protected/views/layouts/column1.php 文件作為默認的布局文件
2、布局內容
舉個栗子就明白了,比如,一張 html 網頁:
上面是公用頭部 html:一般是頂欄,logo, 導航欄等等
中間左側的主內容依照不同的網頁有不同的內容,使用 <?php echo $content; ?>
中間右側是側欄 html
尾部是公用尾部 html:一般是版權信息等等
五、載入外部文件
CSS與Js等資源文件放入assets里面,按照前后台目錄分開
Yii::app()->request->baseUrl;可以獲取請求的基礎路徑
例如: <?php echo Yii:app()->request->baseUrl; ?>/assets/index/css/index.css 將得到一個紙箱前台首頁的 css 文件 url
Yii::app() 返回的是在index.php入口里創建的CWebApplication實例。在一次請求處理過程中,這是唯一的實例
Yii::app() 主要負責一些全局性的功能模塊。
六、分配變量並在視圖中調用
1、控制器分配變量
$data = array(
'articleList' => $articleList,
'page' => $page
);
$this->render('index', $data);
2、視圖中調用變量
<?php foreach($article as $v): ?> <li><?php echo $v->title; ?></li> <?php endforeach; ?>
七、擴展自定義函數
在protected目錄下建立function.php文件
在單入口中引入,
require_once('./protected/function.php');
