第一節
Cake的Scaffold非常酷
真酷,我一定要把它用在我的產品內!
大家剛看到都會這麼想,連我們到現在都還覺得它的確很酷,
但請認清一件事Scaffold…嗯…它畢竟只是Scaffold。
它是一堆可以讓你在專案開發初期快速建構雛形的工具。
但,它的可塑性不足。所以,當您發覺很想開發自己的邏輯和畫面時,就是放下Scaffold,開始寫一些程式碼的時候了。
Scaffold在應用程式開發初期非常好用。
一開始的資料庫連schemas都還沒確定,甚至可能整個被推翻,這對整個設計流程來說是很正常的事。
但這麼做的問題在:網頁程式開發者總討厭開發一些未來不使用的表單。
為了減低開發者在這方面的負擔,Cake就加入了Scaffold。
Scaffold會分析資料庫內的資料表,建立標準的新增、刪除和編輯鈕,標準的編輯表單和標準的檢視版面。
想在應用程式中使用Scaffold,只要在controller中加入$scaffold變數
<?php
class CategoriesController extends AppController
{
var $scaffold;
}
?>有一個關於Scaffold的重點要提醒:
它會把所有以 _id 為結尾命名的欄位視為一組外部鍵,在底線前的字就是外部鍵關聯的資料表名稱。
舉個例子來說,如果有一個資料表含有一個欄位叫parent_id ,則這個欄位就代表是連到parent資料表的外部鍵。
若不是,那這時候就得將他換個名字,例如parentid。
再來,當資料表有一個外部鍵(例如title資料表有個欄位叫category_id),且己經把model的關聯做好(參考6.4關聯),
那麼顯示/編輯/新增的view會自動從外部鍵所指的資料表(此例為category)取出資料,放到選擇欄位的選項內。
<?php
class Title extends AppModel
{
var $name = 'Title';
var $belongsTo = array('Category'=>
array('className' => 'Category',
'foreignKey' => 'category_id')
);
}
?>
若要設定外部資料表所顯示的欄位,請指定外部資表內的$displayField變數。
下面的程式碼是指定要顯示Category裡的title欄位:
<?php
class Category extends AppModel
{
var $name = 'Category';
var $displayField = 'title';
}
?>第二節
自訂Scaffold的外觀
如果你想讓Scaffold看起來有點不一樣,可以自己建立。
我們並不建議在產品應用程式中用到這項技術,但在開發初期十分好用。
要改變Scaffold的view,必須自己設計幾個東西:
為單一controller自訂Scaffold view
PostsController的自訂Scaffoldview 看起來如下:
/app/views/posts/scaffold/index.scaffold.thtml
/app/views/posts/scaffold/show.scaffold.thtml
/app/views/posts/scaffold/edit.scaffold.thtml
/app/views/posts/scaffold/new.scaffold.thtml
自訂整個應用程式的Scaffold view
如果要改變所有controller的Scaffold view,自訂的內容如下:
/app/views/scaffold/index.scaffold.thtml
/app/views/scaffold/show.scaffold.thtml
/app/views/scaffold/edit.scaffold.thtml
/app/views/scaffold/new.scaffold.thtml
如果發覺必須改變controller的邏輯,就放棄Scaffold,開始寫自己的程式吧。
在Cake的程式產生器Bake中有一個特色對十分有用。Bake可以產生Scaffold的程式碼,你可以依需求去修改它。
沒有留言:
張貼留言