Your posts match “ yii-framework ” tag:

Yii framework 筆記 (一)

最近因為某些原因開始在玩Yii framework這個最近在PHP界很熱門的web framework,因為長年累月玩Rails下來後有一點基本的MVC概念(only for Web),所以移轉到Yii framework上的時候算是容易 ...

安裝

http://www.yiiframework.com/download/下載Framework後,存在一個你認為ok的地方。這個本身就是一個framework而非一個project template,裡面有包一個執行檔可以像Rails那樣產生東西(controller / model那類的),所以不必複製複製複製、貼上貼上貼上。

產生一個Project

在這一點,就有點像是執行rails new project的感覺一樣。先透過終端機進去project folder後,執行cd framework; php yiic

這個yiic指令就有點像是rails指令一樣,然後建立Project就是:php yiic webapp project_name,它就會在你指定的目錄底下建立檔案。建立好的Project中裡面有一個protected資料夾,資料夾內也有yiic這個檔案可以使用。

如果需要用到Git來版本控制的話,可以在最後面寫上git,譬如說:

php yiic webapp ~/projects/blog git

Routing

protected/config/main.php中有一個urlManager,取消註解後就可以用了 ... 目前似乎只有Rails 1時代的那種:controller/:action/:id的類似寫法。

Generators

在Rails中最棒的就是那個很屌的Generators,可以用rails g controller來產生Controller,那在Yii framework中藥怎樣使用呢?在產生Project後,就可以打開protected/config/main.php,把modules那一段註解解開,把gii這個module給引入到Project之中,然後把密碼改掉。

接著,打開瀏覽器,到你的網站的首頁,譬如說是http://127.0.0.1/blog/index.php,然後在後面加上?r=gii,變成http://127.0.0.1/blog/index.php?r=gii,這樣就會進去到一個產生器的頁面。

接著,我們可以看到左邊選單中有以下幾種Generators (本文是2013-08-13寫的)

  • Controller
  • Crud
  • Form
  • Model
  • Module

在測試的過程當中發現到其中幾個Generator是有相依性的,像是如果要用Crud的話,必須要先有Model才可以;可是要產生Model,必須要先有資料表,並不會幫忙產生migration file,必須自己透過protected/yiic migrate create的方式來建立migrate file,這點跟Rails比較不一樣。

所以我們來試試看吧,建立一個叫做Category的Model跟Crud

  1. 執行 protected/yiic migrate create categories
  2. 編輯 protected/migrations底下的剛產生的categories.php
  3. 內容如下
    <?php
    class m130813_100022_categoriess extends CDbMigration{
    
    
    

    public function up() {
    $this->createTable('categories', array(
    "id" => "pk",
    "name" => "string NOT NULL",
    ));
    }

    public function down(){
    $this->dropTable('categories');
    }
    }
    ?>


    1. 執行 protected/yiic migrate up後輸入yes去執行
    2. 在Generators頁面中,選擇Model Generator
    3. Table Name輸入表格名稱,這邊應該是categoriesModel Name輸入Category。好了之後按下Preview
    4. 檢查過後按下Generate
    5. 用同樣步驟處理Crud Generator

    搞定

    注意

    如果進不去Gii的話,檢查是不是把urlManager給打開了。