gpt4 book ai didi

mvvm - PHPTAL: View 模型解决方案

转载 作者:行者123 更新时间:2023-12-03 10:48:03 25 4
gpt4 key购买 nike

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

Controller

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

主页.html <- 模板
<p>Hello <strong>${viewmodel/test}</strong>.</p>

首页.php <- View 模型类
namespace Viewmodel;
class Home {
function test() {
return "world";
}
}

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

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

最佳答案

简而言之,没有。

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

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

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

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

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

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

关于mvvm - PHPTAL: View 模型解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18709496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com