顯示具有 cakephp 標籤的文章。 顯示所有文章
顯示具有 cakephp 標籤的文章。 顯示所有文章

2010年9月24日 星期五

VIEW的用法

VIEW的概念:

通常我們真正在瀏覽器上看到的版型,是由每個controllerlayoutaction對應的版型組合出來的。
 Layout:你可以打開album.thtml(/home/photo/app/views/layouts/album.thtml)你會發現layout只是一個外框,它並沒有處理任何有關資料呈現的方式,說明一下,
裏面的程式碼:
 echo $title_for_layout?> à 這個會對應到controllerpageTitle這個變數,你可以在controller中,修改它。
  echo $content_for_layout ?> à 這個是對應到每個action使用的view,也就是你資料呈現的地方。
  echo $this->renderElement('header');?> à 這個是有關於elemenet的機制,先簡單來說,通常一個網站所有版面中,會有許多相同的地方(: headerfooter),這時候我們就可以分離出來,讓網站的版型來共同即可。
 Action的版型:CakePHP的目錄擺法:app/views/controller/action.thtml (ex:/home/photo/app/views/ab/view.thtml),舉例來說,我們的Ab這個controller中的view這個aciton,它對應到的版型就應該是在/home/photo/app/views/ab/view.thtml。而view.thtml裏面的變數,都是來自當初在contoller中,$this->set()來的。
 Element:如同剛剛說的,通常一個網站的網頁,會有許多相同的部分,我們可以把它們分離出來,日後維護比較方便。你可以把這些分離出來的版型放在app/views/elements底下。要使用的時候,使用$this->renderElement()就可以了。

Model 用法

Model 用法:

Model是負責跟資料庫溝通用的,一個資料表會對應到一個model程式,
通常我們也會在這邊定義好資料庫中,資料表(model)與資料表(model)的關係。
Model的程式是要放在app/models裏面,要繼承AppModel (ex: class Album extends AppModel)。

Model的基本要素:

$name:和controller的$name相同,是用來告訴CakePHP這個model的名稱。

$primaryKey:是指這個model對應到的資料表中的primary key欄位名稱,
如果沒設定的話,CakePHP會預成”id”。

$useTable:是指這個model對應到的資料表名稱。CakePHP有自己一套對應的規則,
不過我們就直接指定給它比較清楚,日後維護也比較方便。

Model如何處理資料:

最簡單的方式,參照CakePHP手冊上的做法,在網頁裏面中,form的變數名稱取成”data[model_name][column_name]”的方式,這個可以透過$html這個helper來達成,
你會看到在某些view裏面,會有$html->input等的程式,就是在做這項工作。

當資料從網頁傳到controller時,controller會包裝這些資料到$data這個array中,
所以你會在controller裏面,常常看到$this->data。

資料儲存或更新至資料庫時,可以用model的save來達成,但是要注意的是,
如果沒有指定model中primaryKey的值時,model會當作是要做insert的動作,
如果有指定primaryKey的值時,則是做update。在controller的程式碼中,
ex:$this->Album->id = 1;$this->Album->save($this->data);
這個會對資料表中,primaryKey值為1的資料,做修改。

__contruct():在Model的__contruct()中,我們直接指定了Model各欄位的定義,
我們會這麼做的原因是,CakePHP在使用Model時,都會先對資料庫執行describe的指令,
來取得該資料表的欄位定義,因此我們先直接指定給Model,省去CakePHP做這樣子的動作。