yii 是一個基于元件、純oop的、用于開發大型 web 應用的高性能php架構。
它将web程式設計中的可重用性發揮到極緻,能夠顯著加速開發程序 。
yii适合大流量的應用,如門戶、bbs、cms及b2b系統等,功能豐富,性能優異
1.在環境變量裡添加 e:\yii framework;
2.在環境變量裡添加 e:\wamp\bin\php(不添加提示php.exe不是内部指令)或yiic.bat中php_command= e:\wamp\bin\php.exe
為了使用上面提到的 <code>yiic</code> 工具,cli php 程式必須在指令搜尋路徑内(譯者注:即php.exe 所在的目錄必須在path環境變量中 ),登出後path配置會生效
1.通過cmd自動化的代碼生成項目骨架
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXauYjM5cmbvlXZkVHavw1LcpDc0RHaiojIsJye.png)
% cd webroot
% php yiiroot/framework/yiic webapp "e:\apache2\htdocs\test"
建立資料庫連接配接
要在我們建立的程式骨架中使用這個資料庫,我們需要修改它的應用配置 ,它儲存在php腳本/protected/config/main.php 中。
執行data/schema.sqlite.sql腳本,連接配接sqlite配置
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXauYjM5cmbvlXZkVHavw1LcpDc0RHaiojIsJye.png)
'db'=>array(
'connectionstring' => 'sqlite:protected/data/blog.db',
'tableprefix' => 'tbl_',
),
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXauYjM5cmbvlXZkVHavw1LcpDc0RHaiojIsJye.png)
'connectionstring' => 'mysql:host=localhost;dbname=blog',
'emulateprepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
2.建立,讀取,更新,删除 (crud) 是應用的資料對象中的四個基本操作。由于在web應用的開發中實作curd的任務非常常見,yii 為我們提供了一些可以使這些過程自動化的代碼生成工具,名為 gii
首先我們需要安裝 gii. 打開檔案<code>protected/config/main.php</code> ,添加如下代碼:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXauYjM5cmbvlXZkVHavw1LcpDc0RHaiojIsJye.png)
'import'=>array(
'application.models.*',
'application.components.*',
'modules'=>array(
// uncomment the following to enable the gii tool
'gii'=>array(
'class'=>'system.gii.giimodule',
'password'=>'sa',
//ipfilters用于所在伺服器不在本機的情況需開啟
//'ipfilters'=>array('192.168.1.10','::1'),
),
上面的代碼安裝了一個名為 gii 的子產品,這樣我們就可以通過在浏覽器中浏覽如下url來通路 gii 子產品:
http://localhost/test/index.php?r=gii,在彈出的視窗中輸入sa。如下圖
建立模型 model
首先我們需要為每個資料表建立一個模型(model)類 。模型類會使我們可以通過一種直覺的、面向對象的風格通路資料庫。稍後我們将會看到這一點。視圖可以生成model,視圖沒有主鍵model需要加入primarykey方法
點選 model generator 連結開始使用模型建立工具。
在 model generator 頁中,在table name一欄輸入 tbl_user (使用者表的名字),
然後按下 preview 按鈕。一個預覽表将顯示在我們面前。我們可以點選表格中的連結來預覽要生成的代碼。如果一切ok,
我們可以按下 generate 按鈕來生成代碼并将其儲存在一個檔案中。
生成的protected/models/user.php包含了繼承自 cactiverecord 的 user 類,可用于通路 tbl_user 資料表;
實作crud操作
模型類建好之後,我們就可以使用 crud generator來建立為這些模型實作crud操作的代碼了。我們将對user模型執行此操作。
在 crud generator 頁面中,model class 一欄輸入user(就是我們剛建立的user模型的名字models/user.php) ,然後按下 preview 按鈕。
我們會看到有很多檔案将被建立。按下generate按鈕來建立它們。
這樣,我們就使用 yiic工具 生成了對于user表的增删改查。使用
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXauYjM5cmbvlXZkVHavw1LcpDc0RHaiojIsJye.png)
http://localhost/test/index.php?r=user
通路下,試試
多子產品(modules)設計
選擇module generator-->在module id 輸入框中輸入要添加的子產品(例如test)-->點選preview按鈕-->點選generate按鈕.至此,test子產品便添加完成。對應目錄為/protected/modules/test目錄
新加子產品通路位址為:http://website/index.php?r=test
(中級)自定義gii生成代碼模闆
我們使用一個例子來介紹如何定制代碼模闆。假設我們想要定制由 model 生成器生成的代碼。
我們首先建立一個名為 protected/gii/model/templates/customer 的目錄。這裡的model意味着我們将要 override 預設的 model 生成器。templates/customer意味着我們将增加一個新的代碼模闆集名為customer。複制檔案 framework/gii/generators/model/templates/default/model.php 到 protected/gii/model/templates/customer。現在是時候做點真正的工作了。打開檔案 protected/gii/model/templates/customer/model.php 以編輯它。記得這個檔案将作為類似一個視圖檔案被使用,意味着它可以包含 php 表達式和語句。讓我們更改模闆以便生成的代碼裡 attributelabels() 方法使用 yii::t() 來翻譯屬性标簽:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXauYjM5cmbvlXZkVHavw1LcpDc0RHaiojIsJye.png)
public function attributelabels()
{
return array(
<?php foreach($labels as $name=>$label): ?>
<?php echo "'$name' => yii::t('application', '$label'),\n"; ?>
<?php endforeach; ?>
);
}
在每個代碼模闆中,我們可以通路一些預定義的變量,例如上面例子中的 <code>$labels</code> 。這些變量由對應的代碼生成器提供。不同的代碼生成器可能在他們的代碼模闆中提供不同的變量。請認真閱讀預設代碼模闆中的描述。
現在打開 model 代碼生成器頁面。點選 code template 輸入框。我們應當看到一個下拉清單 ,這個清單包含了我們建立的模闆目錄 customer。我們選擇此模闆生成代碼檔案。
架構生成controller的模闆為:framework/gii/generators/controller/templates/default/controller.php
架構生成model的模闆為:framework/gii/generators/model/templates/default/model.php
(進階 )建立新的生成器
在framework/gii/generators建立widget檔案夾,可以編寫支援module的crud generator,moduleid下model class的寫法application.modules.moduleid.models.modelclass
可以把自己擴充的gii放到項目目錄下面,配置如下
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ichR3cf52bjl2LcNXZnFWbp9CXt92YuUWelRXauYjM5cmbvlXZkVHavw1LcpDc0RHaiojIsJye.png)
'modules' => array(
'gii' => array(
'class' => 'system.gii.giimodule',
'password' => 'gii',
'generatorpaths' => array(
'application.gii.generators',//項目目錄結構
),
'ipfilters' => array('127.0.0.1', '::1'),
),
上面的配置告訴 gii在别名是application.gii.generators的目錄中尋找生成器,以及預設的framework位置system.gii.generators在不同的搜尋路徑有同名的生成器也是可以的。這種情況下,在giimodule::generatorpaths 指定目錄中先出現的生成器有優先權 。