跳到內容

Mojavi 3 手冊/從 Mojavi 2 遷移

來自華夏公益教科書,自由的教科書

先決條件

[編輯 | 編輯原始碼]

在嘗試升級到 Mojavi3 之前,你應該對 Mojavi2 和 PHP5 有相當的瞭解。

如果你想快速瞭解 Mojavi 3,請參閱建立你的第一個模組。

在開始將應用程式從 Mojavi2 遷移到 Mojavi3 之前,請確保你使用的主機支援 PHP5。 你可以透過執行以下程式碼來確定你的主機是否支援 PHP5

phpinfo();

此外,你需要下載並安裝 Mojavi3 軟體包,可以透過訪問以下位置獲得。

上下文

[編輯 | 編輯原始碼]

可能 Mojavi3 最重要的新功能和強大之處在於 Context 物件。 一旦我弄清楚這東西的作用,我就愛上了它。 基本上,它是一種催化劑/儲存物件,允許你訪問

  • 透過 getRequest() 獲取 $request 物件
  • 透過 getController() 獲取 $controller 物件
  • 透過 getUser() 獲取 $user 物件
  • 透過 getModuleName() 和 getActionName() 獲取當前操作/模組名稱
  • 最後是當前模組的目錄

或多或少,大多數暴露給使用者/開發人員(你)的類將有一個 getContext() 函式,這將允許你訪問此物件。 隨著最近級聯呼叫的加入,你可以執行在 php4 中無法執行的操作,例如

舊方法

$obj        =& $request->getAttribute('myobj');
$anotherobj =& $obj->doSomethingSpecial();
$anotherobj -> execute();

新方法

$this->getContext()->getRequest()->getAttribute('myobj')->doSomethingSpecial()->execute();

好吧,這可能不是最好的例子,因為它太長了,但你明白我的意思,1 行 vs 3 行,在處理像複製它們而沒有引用這樣的大物件時,不會出現任何錯誤。

本節將繼續更新…

翻譯你的渲染器

[編輯 | 編輯原始碼]

Mojavi2 使用“渲染器”將一個模板系統的 API 翻譯成一個通用的 API,以便開發人員可以輕鬆地將一個模板系統替換為另一個。 例如,Smarty 模板引擎使用 $smarty->assign() 允許你設定一個變數,而 patTemplate 另一個模板系統,使用 $pat->addVar()。 在 Mojavi 2 中,你將編寫或使用現有的渲染器,然後呼叫它來顯示你的輸出。

注意:這通常透過過濾器完成,過濾器將建立渲染器物件,然後透過以下方式將其分配給你的 $request

$request->setAttribute('MyRenderer',$rendererObj))

Mojavi3 使用很大程度上相同的方法,但它不是從每個檢視中的 $request 物件直接獲取渲染器,而是簡單地擴充套件 View 類。

例如


abstract class SmartyView extends View
{
.....

function __construct()
{
   $this->engine = $this->getContext()->getRequest()->getAttribute('MySmartyObj');
}

, $value)

{
   $this->engine->assign($name, $value);
}

.....
}

注意:使用

$this->engine = $this->getContext()->getRequest()->getAttribute('MySmartyObj');

只是一個我在檢視中獲取任何物件的最佳解決方案,你也可以很容易地執行以下操作

$this->engine = new Smarty();

Mojavi3 View 主要是抽象類,它提供了一套用於工作的函式框架,從而提供與 Mojavi2 中實現的統一 API(它是統一的,因為你被迫遵守 View 抽象類實現的命名約定)。

現在,你只需擴充套件 View,並對其進行初始化,而不是初始化你的渲染器物件(就像你在 Mojavi2 中一樣)。 就像上面顯示的那樣

abstract class SmartyView extends View
{
...

就是我們新的 View 的樣子。 為了使這種新的 View 型別生效,我們在宣告模組的檢視時擴充套件它。 例如

class DoSomeActionSuccessView extends SmartyView
{
...
}

如你所見,這比在每個新的 View 中從 $request 中提取渲染器要流暢得多,它也減少了你必須複製和貼上的程式碼,從而減少了維護的程式碼。 你可能還注意到 View 的命名方案不同,你不再將檔案命名為 DoSomeActionView_success.class.php,而是將其命名為 DoSomeActionSuccessView.class.php,並相應地命名類(在 Mojavi2 中,我們只將檢視類命名為 DoSomeActionView,在 Mojavi3 中,它將 DoSomeActionSuccessView 中的“Success”替換為你的應用程式狀態)。

本節將繼續更新…

Mojavi3 中的操作與 Mojavi2 中的操作非常類似,只是在一些增強和語義調整方面有所不同。 列出如下

  • 在 Mojavi2 中返回 VIEW_SUCCESS 時,現在返回與你的應用程式狀態對應的 View 類常量,即:View::Success 或 View::Error
  • 在檢查支援執行的檢視型別(getRequestMethods)時,不再返回 REQ_POST 等,而是返回 Request::Post 等。
  • getRequestMethods() 有一個新的返回型別,Request::All,它適用於所有請求方法。
  • 所有操作擴充套件的根 Action 類現在有一個 getContext() 方法,它允許你訪問上下文物件。

Mojavi3 配置預設使用 .ini 檔案完成。 這種簡單直接的配置使配置 mojavi 變得非常容易。 這些 ini 檔案的基本語法如下

[SECTION]

    ; a comment.....
    ConfigKey           = "%MO_APP_DIR%/my/config/value"

由於有些人可能不喜歡 ini 檔案,因此 Mojavi3 的建立方式允許你編寫自己的配置處理程式。 例如,如果你想使用 xml 檔案來配置你的 mojavi,你可以編寫一個配置處理程式,將其插入,然後開始使用你的自定義配置樣式。

本節將繼續更新…

參考資料

[編輯 | 編輯原始碼]

要了解更多關於 PHP5 的資訊,請訪問:我可以去哪裡瞭解更多?

華夏公益教科書