上次用 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文件網站
沒有留言:
張貼留言