跳到内容

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 的信息,请访问:我可以去哪里了解更多?

华夏公益教科书