我有下一个问题。
我有一个页面:
它有效。模板文件是一个带有网格和表单的Web,我可以在其中CRUDL数据库,因此它可以根据访问它的用户而有所不同。例如,如果当前用户是管理员,那么它应该显示所有选项,而如果它是受限用户则应该隐藏一些字段。
然而,我不知道接下来该怎么做。在业务逻辑和模板之间进行交互的更好方法是什么?。
a)使用带逻辑的模板( Presentation Logic )。例如,如果用户(正在访问它)具有有限的权限,则逻辑删除“保存”按钮:
...
{if current_user!=limited}
<input type='button' value='save' />
..
{endif}
...
b)使用不同的模板文件,并在业务逻辑中决定加载哪个模板。
if ($current_user!="limited") {
load_template("template_complete.tpl");
} else {
load_template("template_limited.tpl");
}
还是存在另一种解决方案?
答案 0 :(得分:4)
在视图中实现表示逻辑是完全可以的。事实上,这是正确的地方,出于同样的原因,它也被称为“表示层”。当您需要在视图中实现某些表示逻辑时,您将始终达到这一点,例如,当迭代数组以将其显示为表格时,或者在输入验证失败时将错误消息放在输入字段下方时。
正如Michael Rushton已经说过的那样:你可以避免在可以避免的情况下复制代码。
模型 - 视图 - 控制器模式是关于将逻辑划分为三层:
不关于将所有逻辑从演示文稿移动到控制器。
答案 1 :(得分:2)
如果模板完全不同,那么我会说第二个例子。但是,如果有限用户和非限制用户之间的差异是一个按钮,链接,<div>
等等出现在一个而不是另一个,那么我说去第一个。您不希望过多地复制代码,因为它使更新或修复错误变得更加麻烦。
虽然你想尽可能多地将逻辑与演示分开,但是可以把它放得太远。在某些时候总会有一些重叠。提供它并不太复杂,在条件语句中使用<input>
没有任何问题。
无论如何,PHP都是与HTML一起使用的。
答案 2 :(得分:0)
我不是只看这个例子,而是鼓励你思考你想要实现的目标,制定规则,然后按照规则行事。
e.g。在上面的示例中,您是否试图阻止用户显示某些信息?或者您是说用户具有某个角色,系统应该具有某些控件来响应某些角色。
它现在也是开发工作与后期维护工作的回报。也许试着想想你在一个完美的世界里会做些什么,然后向后工作。也许你可以构建一个构造函数来创建你需要的各种模板等。
我不认为有正确或错误,只是替代方案和不同的回报
答案 3 :(得分:-1)
喔。答案很简单 只是尝试支持这些不同的模板很长一段时间,努力重复所有的更正。
你会知道答案。
这是编程,伙计 编程代表避免重复。
提示:无论如何,你不能让你的第二种方法“无逻辑” 总有逻辑。出于某种原因,它被称为“presentation logic ”。