1

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

控制器

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

home.html <- 模板

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

Home.php <- viewmodel 类

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

以上方法有效,但如何避免在每个变量引用前加上“viewmodel/”

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

4

1 回答 1

0

简而言之,没有。

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

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

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

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

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

<strong tal:condition="isNegative:customer/balance"/>
于 2013-09-23T20:34:52.960 回答