2013年8月18日 星期日

用 Eclipse 開發 Yii Web Application (四)

上次用 Gii 的CRUD Generator 幫我們建立了一些基本的框架, 我們來看一下Gii 建立的程式碼是如何運作的。
記得我們要連上 Courses 的網址是 http://localhost/MyWebSite/index.php?r=courses 其中 r=courses 會把我們導向 controllers/CoursesController.php 由於後面沒有參數了因此預設等同於 http://localhost/MyWebSite/index.php?r=courses/index 也就是會由 CoursesController.php 裡面的
public function actionIndex() 來處理我們的請求。




我們來看看 actionIndex() 的程式碼, 看看他在做什麼?
    public function actionIndex()
    {
        $dataProvider=new CActiveDataProvider('Courses');
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));
    }


其實很簡單只有兩行程式碼
第一行是產生一個 CActiveDataProvider 的物件, 來存取我們在資料庫中的 table courses 的資料。
第二行把程式導向 views/courses/index.php 並把剛才的物件傳過去。
所以我們看看 index.php 內容為何?
基本上可以分三大塊, 分別對應到我們看到的網頁內容, 我們這邊只討論顯示資料庫內容的部分
<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
));  ?>
這裡用了yii 裡面的一個 widget zii.widgets.CListView, 而他內容的來源就是之前從 Controller 傳過來的 $dataProvider, 而他的顯示格式 'itemView'=>'_view', 是定義在 views/courses/ 下面的另一個檔案 _view.php
所以我們來看看 _view.php 內容為何?
<?php
/* @var $this CoursesController */
/* @var $data Courses */
?>

<div class="view">

    <b><?php echo CHtml::encode($data->getAttributeLabel('course_no')); ?>:</b>
    <?php echo CHtml::link(CHtml::encode($data->course_no), array('view', 'id'=>$data->course_no)); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('course_name')); ?>:</b>
    <?php echo CHtml::encode($data->course_name); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('description')); ?>:</b>
    <?php echo CHtml::encode($data->description); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('teacher_no')); ?>:</b>
    <?php echo CHtml::encode($data->teacher_no); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('credit')); ?>:</b>
    <?php echo CHtml::encode($data->credit); ?>
    <br />


</div>

 其實也滿簡單的, 把五個欄位的欄位名稱及內容印在螢幕上, 其中第一個欄位 (course_no) 要有連結連到詳細內容。
echo CHtml::encode($data->getAttributeLabel('course_no')); 其中 getAttributeLabel 是到我們建立 Model 裡面定義的欄位內容
如果你要改欄位名稱只要統一在 Model 裡面改, 所有用到的欄位全部會一起更改。
我把描述改成中文後, 網頁內容重整後就可以看到剛剛改的內容。

echo CHtml::link(CHtml::encode($data->course_no), array('view', 'id'=>$data->course_no));
用 CHtml::link 連結到另一個 views/courses/view.php 並帶入參數 id 與內容,
因此會做成連結 http://localhost/MyWebSite/index.php?r=courses/view&id=MI111001

參考資料:
Yii 官方API文件網站  

沒有留言:

張貼留言