PHPTAL:Viewmodel解决方案

时间:2013-09-10 01:37:39

标签: mvvm viewmodel phptal

我已经选择了PHPTAL(来自PHPMustache之后),我试图在我的模板中注入一个ViewModel类的Mustache风格。让我解释..

控制器

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

home.html < - template

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

Home.php &lt; - viewmodel class

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

上面的有效,但是如何避免使用&#34; viewmodel /&#34; 为每个变量引用添加前缀?

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

1 个答案:

答案 0 :(得分: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"/>