The Art of Readable Code && High Performance Comments

Symfony 使用 MVC 三層架構,而其頁面顯示則類似  CSS 的 Cascade Model,依照 Project / Application / Module 進行設定。

每個 Application 有自己的 Template,稱為 Layout,預設為 [AppHome]templateslayout.php。每個 Layout 都包含完整的 html 碼,可以很容易的從美工樣板中擷取。這個 Layout 控制了這個 Application 下所有頁面 (Module) 的顯示。其中有一段 <?php echo $sf_content ?> 則顯示了來自 Module 的內容。

每個與 Model 相關的 Module 都會有 Index, Show, New, Edit, Create, Delete 等數種 Action;而每項 Action 都會在 modules/[ModName]/actions/actions.class.php 中有相對應的 member function (Controller),並在 modules/[ModName]/templates 下有相對應的 template (View)。當 httpd 傳入 request 時,Controller 會準備要顯示的內容;這些內容在 actions.class.php 以 member variable 存在 ($this->foo = “bar”;),並在 template 內的相對應樣板中,能透過 <?php echo $foo; ?> 來提取/顯示。這些內容最後會被存入 $sf_content 中,由 layout 來顯示。

若是 layout 中有特定區塊要隨 module / action 改變的話,可以在 layout 中建立 slot ( <?php include_slot([SlotName], [DefaultSlotValue]);?> ,然後在各 template 中以 slot 指令 (slot([SlotName], [SlotValue]) 來設定。

在 Symfony 內部,頁面是透過 module, action 兩項變數以及參數對 (Key=value&Key2=value2&…) 來決定使用哪組 C/V 顯示;然而為了讓觀賞者與搜尋引擎更開心,外部的 URL 可以也應該是其他形式。從內部 URI 與外部 URL 間的轉換稱作 routing:

  • 由內部 URI 轉換為外部 URL 可以使用url_for 指令,例如 url_for(‘job/show?id=3’) 預設會產生出 job/show/id/3 這樣的 URL。使用適當的 routing class (例如 sfDoctrineRoute ,可透過 routing.yml 指定) 也可以使用 url_for([URLName], [ObjectToDisplay]) 這樣的方式。
  • 由外部 URL 轉為內部 URI,則是查找 routing.yml 內第一個 match的規則來解讀。在以給定物件與 url_for() 產生連結的時候,也是透過 routing class 比對 routing.yml 內的內容來決定。

當所有適當的 route 都已指定完畢後,可以將 default 拿掉,以免被像 xDite 的壞人拿來踹資料 XD

發表迴響

分類

%d 位部落客按了讚: