天天看點

YII 快速建立項目GII

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自動化的代碼生成項目骨架

YII 快速建立項目GII

% cd webroot  

% php yiiroot/framework/yiic webapp "e:\apache2\htdocs\test"  

建立資料庫連接配接

要在我們建立的程式骨架中使用這個資料庫,我們需要修改它的應用配置 ,它儲存在php腳本/protected/config/main.php 中。

執行data/schema.sqlite.sql腳本,連接配接sqlite配置

YII 快速建立項目GII

'db'=&gt;array(  

    'connectionstring' =&gt; 'sqlite:protected/data/blog.db',  

    'tableprefix' =&gt; 'tbl_',  

),  

YII 快速建立項目GII

    'connectionstring' =&gt; 'mysql:host=localhost;dbname=blog',  

    'emulateprepare' =&gt; true,  

    'username' =&gt; 'root',  

    'password' =&gt; '',  

    'charset' =&gt; 'utf8',  

2.建立,讀取,更新,删除 (crud) 是應用的資料對象中的四個基本操作。由于在web應用的開發中實作curd的任務非常常見,yii 為我們提供了一些可以使這些過程自動化的代碼生成工具,名為 gii

首先我們需要安裝 gii. 打開檔案<code>protected/config/main.php</code> ,添加如下代碼:

YII 快速建立項目GII

'import'=&gt;array(  

    'application.models.*',  

    'application.components.*',  

'modules'=&gt;array(  

    // uncomment the following to enable the gii tool  

    'gii'=&gt;array(  

        'class'=&gt;'system.gii.giimodule',  

        'password'=&gt;'sa',  

        //ipfilters用于所在伺服器不在本機的情況需開啟    

        //'ipfilters'=&gt;array('192.168.1.10','::1'),    

    ),        

上面的代碼安裝了一個名為 gii 的子產品,這樣我們就可以通過在浏覽器中浏覽如下url來通路 gii 子產品:

http://localhost/test/index.php?r=gii,在彈出的視窗中輸入sa。如下圖 

YII 快速建立項目GII

建立模型 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表的增删改查。使用

YII 快速建立項目GII

http://localhost/test/index.php?r=user   

通路下,試試

多子產品(modules)設計

選擇module generator--&gt;在module id 輸入框中輸入要添加的子產品(例如test)--&gt;點選preview按鈕--&gt;點選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() 來翻譯屬性标簽:

YII 快速建立項目GII

public function attributelabels()  

{  

    return array(  

&lt;?php foreach($labels as $name=&gt;$label): ?&gt;  

            &lt;?php echo "'$name' =&gt; yii::t('application', '$label'),\n"; ?&gt;  

&lt;?php endforeach; ?&gt;  

    );  

}  

在每個代碼模闆中,我們可以通路一些預定義的變量,例如上面例子中的 <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 

YII 快速建立項目GII

可以把自己擴充的gii放到項目目錄下面,配置如下

YII 快速建立項目GII

'modules' =&gt; array(  

    'gii' =&gt; array(  

        'class' =&gt; 'system.gii.giimodule',  

        'password' =&gt; 'gii',  

        'generatorpaths' =&gt; array(  

            'application.gii.generators',//項目目錄結構  

        ),  

        'ipfilters' =&gt; array('127.0.0.1', '::1'),  

    ),  

上面的配置告訴 gii在别名是application.gii.generators的目錄中尋找生成器,以及預設的framework位置system.gii.generators在不同的搜尋路徑有同名的生成器也是可以的。這種情況下,在giimodule::generatorpaths 指定目錄中先出現的生成器有優先權 。