首頁 Joomla! 開發實務 MVC-Controller的預設機制
MVC-Controller的預設機制 列印 填寫電子郵件
(0 位用戶參與評分, 當前平均得到 0 顆星星)
Joomla! / 開發技術 / Eddy Chang / 週四, 15 七月 2010 19:30
在MVC的簡介文章中說明了有關於MVC各自的扮演的角色,事實上有很多令初學者很難一下子就看得清楚的預設機制,尤其是在Controller中的預設流程,這篇文章是在討論由JController程式碼所推演的預設機制。

JController是所有controller的父類別,在程式碼中可以找到以下的執行流程。

初始化過程(建構子):
  1. 定義了元件的所在目錄作為基礎路徑。
  2. 定義了taskmap(工作地圖),這是由掃描過子類別檔案中的方法(method)所構成
  3. 註冊預設的task(工作),即是display
  4. 定義預設的model尋找的路徑
  5. 定義預設view尋找的路徑

解說:
  • model和view的路徑(或所在目錄)是有一定的規範
  • 在控制器子類別中,實作了什麼方法,名稱就會被加到工作地圖中
  • display是預設的工作方法

execute方法:
  1. 由建構子中的工作地圖為基礎,觸發執行對應的方法
  2. 有存取權限的控制

display方法(預設的工作方法,由JController提供許多預設設定):
  1. 定義view的文件類型(format),預設是html,所以對應的是view.html.php
  2. 定義view的類別名稱,預設就是用controller的名稱
  3. 定義view的版面檔案(樣版檔,位於tmpl),預設使用default.php
  4. 由2, 3作為參數值得到view類別的實體參考(用&$this->getView方法)
  5. 用view的類別名稱,去取得model實體參考或建立model實體,代表事實上view和model的名稱會是同名稱,而且預設還是和controller的名稱也一樣(用&$this->getModel或setModel方法)
  6. 用view設定4中得到的版面(layout)
  7. controller中的display傳入值用true/false作快取控制
  8. 執行view的display

解說:
  • 預設view, model, controller的名稱都會一樣,例如HelloController(抓到的名稱是hello),view的classprefix是helloView,所以預設的view名稱是HelloViewHello,model的名稱產生類似於view,預設是HelloModelHello。(註:有classprefix的原因應該是要讓單一個controller可以同時控制多個View或Model)
  • 如果在view的display中看到以下的程式碼,有可能會誤解是破壞MVC的V和M不相互連繫的規則:
    1
    2
    3
    4
    
    //Method to get data from a registered model or a property of the view
    //return: The return value of the method
    //access: public
    $greeting = $this->get( 'Greeting' );

     

    事實上這是因為JController已經設定好對應的model和view的實體參考,所以當然可以互相連繫。

評論:

新增回應


驗證碼
更新

關於我something about me

eddy

Eddy Chang

Joomla!台灣站長、資擘(股)軟體工程師

最新留言Latest Comment

會員登入