如何在业务逻辑和模板之间进行交互?

时间:2012-03-25 12:16:23

标签: php model-view-controller templates business-logic

我有下一个问题。

我有一个页面:

  1. 它从数据库中读取会话以及数据库中的所有内容。
  2. “应用”逻辑。
  3. 最后是作为模板文件(.tpl)的演示文稿
  4. 它有效。模板文件是一个带有网格和表单的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");
     }
    
    • 亲是模板更清晰(无逻辑)
    • 缺点是它是详细的,它需要不同的模板。

    还是存在另一种解决方案?

4 个答案:

答案 0 :(得分:4)

在视图中实现表示逻辑是完全可以的。事实上,这是正确的地方,出于同样的原因,它也被称为“表示层”。当您需要在视图中实现某些表示逻辑时,您将始终达到这一点,例如,当迭代数组以将其显示为表格时,或者在输入验证失败时将错误消息放在输入字段下方时。

正如Michael Rushton已经说过的那样:你可以避免在可以避免的情况下复制代码。

模型 - 视图 - 控制器模式是关于将逻辑划分为三层:

  • 数据表示逻辑(模型)
  • 业务逻辑(控制器)
  • 演示逻辑(视图)

关于将所有逻辑从演示文稿移动到控制器。

答案 1 :(得分:2)

如果模板完全不同,那么我会说第二个例子。但是,如果有限用户和非限制用户之间的差异是一个按钮,链接,<div>等等出现在一个而不是另一个,那么我说去第一个。您不希望过多地复制代码,因为它使更新或修复错误变得更加麻烦。

虽然你想尽可能多地将逻辑与演示分开,但是可以把它放得太远。在某些时候总会有一些重叠。提供它并不太复杂,在条件语句中使用<input>没有任何问题。

无论如何,PHP都是与HTML一起使用的。

答案 2 :(得分:0)

我不是只看这个例子,而是鼓励你思考你想要实现的目标,制定规则,然后按照规则行事。

e.g。在上面的示例中,您是否试图阻止用户显示某些信息?或者您是说用户具有某个角色,系统应该具有某些控件来响应某些角色。

它现在也是开发工作与后期维护工作的回报。也许试着想想你在一个完美的世界里会做些什么,然后向后工作。也许你可以构建一个构造函数来创建你需要的各种模板等。

我不认为有正确或错误,只是替代方案和不同的回报

答案 3 :(得分:-1)

喔。答案很简单 只是尝试支持这些不同的模板很长一段时间,努力重复所有的更正。

你会知道答案。

这是编程,伙计 编程代表避免重复

提示:无论如何,你不能让你的第二种方法“无逻辑” 总有逻辑。出于某种原因,它被称为“presentation logic ”。