PHPTAL:视图模型解决方案



我已经拿起了 PHPTAL(来自 PHPMustache 之后),我正在尝试将 ViewModel 类 Mustache-style 注入我的模板中。让我解释一下..

控制器

$viewmodel = new ViewmodelHome();
$template = new PHPTAL('application/views/home.html');
$template->viewmodel = $viewmodel;
echo $template->execute();

首页.html <- 模板

<p>Hello <strong>${viewmodel/test}</strong>.</p>

首页.php <- 视图模型类

namespace Viewmodel;
class Home {
    function test() {
        return "world";
    }
}

上述方法有效,但是如何避免在每个变量引用前面加上"viewmodel/"

使用Mustache,您的变量上下文可以是单个类。 echo $template->render($html, $viewmodel); .前缀不是必需的。所有的都在松散耦合的视图模型中。我想使用 PHPTAL 强制执行此行为,而不必将整个类显式分配给变量名。

简而言之,没有。

没有等同于 JavaScript 的 with(model){} 运算符。你应该明确你通过$context->set()声明哪些变量并显式使用模型,例如 ${user/name}而不是${name}.最新版本(在 GitHub 中)支持闭包,因此您可以将其用于延迟计算的变量。

如果您没有提供对模型的直接访问,并且希望通过视图模型代理所有数据,那么这看起来与 Moustache 设计理念的阻抗不匹配。

在PHPTAL的MVC方法中,您由模型/控制器处理业务逻辑(例如,存储/操作客户的帐户余额),并且任何特定于视图的逻辑(例如,如果余额为负数,则将其显示为红色)进入模板。

没有中间对象来调解该通信以增加模板的表现力,因为模板语言更具表现力,并且可以使用 TALES 表达式进行扩展:

<strong tal:condition="customer/isInDebt"/>
<strong tal:condition="isNegative:customer/balance"/>

相关内容

  • 没有找到相关文章

最新更新