【问题标题】:PHP MVC - handling viewsPHP MVC - 处理视图
【发布时间】:2012-06-09 16:20:45
【问题描述】:

我发现了一个框架,它以不同于普通 html 的方式处理视图。老实说,我不知道大型框架如何处理这个问题,因为我主要使用一些小型框架,所以这对我来说是一件有趣的事情。一个简单的例子:

而不是写

<h2>Click on this <a href="www.example.com">example</a></h2>

你必须输入

echo $html->h2('Click on this' . $html->link('www.example.com', 'example'));

那么,我的问题是哪个更好?纯html不是会更快吗?让我们说对其他人更容易理解?或者让我们把可以理解的部分放在一边,我想了解更多关于性能的信息,也许还有其他人们知道并且可以在这个问题上提及的东西。

【问题讨论】:

  • 在 MVC 中视图不是模板。视图实际上应该是类,负责表示逻辑。他们应该同时处理多个模板。而且,这样的 HTML 助手是没用的。
  • 你能给我一些关于视图类的好的参考吗?
  • 您可能会发现this article 很有用。只是不要把互联网上的任何文章当作福音。例如,在这篇文章中已经很好地解释了一些概念,但是“模型”太简单了。
  • 您可能会发现this answer 与主题相关。

标签: php model-view-controller view frameworks


【解决方案1】:

就像编程世界中的一切一样,这是一个品味问题。

不过,我强烈反对,原因有以下几点:

  • 它使非 PHP 程序员更难编写视图。
  • 以后调试很烦
  • 我喜欢以与浏览器相同的方式查看我的视图。
  • 给非常简单的东西增加了很多开销
  • 松开漂亮(且合乎逻辑)的 HTML 缩进
  • 丑陋!

如果您正确缩进 HTML 标记,无论如何都很容易发现 HTML 问题。 所以对我来说 - 一直都是纯 HTML。

不过,一些视图助手非常棒——创建链接、处理元素类、验证等。 在我看来,尝试找到最佳位置 - 不要用过多的 PHP 混淆你的视图,但不要放弃确保你的代码尽可能动态。

【讨论】:

  • 非常!这就是我的观点。不是我觉得难,而是丑得要命。感谢您的意见。
【解决方案2】:

你不能这么说... 通常,MVC 框架将代码分成模块,通过分离数据库操作、逻辑操作和视图来使站点干净。还有其他情况,例如发送邮件、分页、图像处理和操作等,这些都是普通编程中的复杂任务,并且可以在 MVC 中用几行代码完成,因为每件事都是预定义的。您在上面定义的示例仅遵循该模式,但您也可以以其他方式使用它。所以,它是一个替代方案。无论哪种方式,您都可以使用它。因此,每当您发现在某些情况下 MVC 可能很复杂时,您都可以按照自己的方式进行操作。所以,我想它更灵活,让我们可以选择两种方式。

希望能回答你的问题。

【讨论】:

  • 好吧,我并不是说这对我来说很复杂。我很好理解,它很简单。我的意思是这真的需要吗?这就是我提到性能问题的原因......
【解决方案3】:

我亲自使用过 Yii PHP 框架,即使它也有处理 HTML 视图(CHtml)的方式,尽管我选择使用其中任何一个。渲染纯 HTML 比编写一些由框架解释然后生成为 HTML 的代码更快的解释是有道理的,事实上,我确实认为纯 HTML 更快。

不过,这样可以更灵活地创建动态 HTML 内容,例如表单支持方法(验证等)和其他辅助方法。另外我认为这更多是从对面向对象编程的痴迷中演变而来的。

但习惯它只是时间问题。如果您考虑性能,请认为它并不会真正产生影响。

【讨论】:

  • 我对性能也有同样的看法。你自己使用 html 助手吗?你觉得它有时有用吗?
  • @Darko 我用过,但我不会说我用过。它在某些情况下(主要是表单)很有用,当您需要触发一些异步 AJAX 事件(使用辅助方法)时,它会降低代码的复杂性。此外,这些框架对于那些可以考虑面向对象但不是具有 HTML 等知识的经验丰富的开发人员的人来说是用户友好的。我相信它更多的是促进 HTML 代码实现的抽象。总之,没关系。 这很好:)
【解决方案4】:

CodeIgniter 是提供 HTML 帮助程序以允许您通过 PHP 代码生成 HTML 的框架之一(就像您问题中的后一种情况)。

虽然这会稍微慢一些,但优点是它可以确保输出有效的 HTML。举个例子:

&lt;h2&gt;This is a header without a closing tag

以上是一个常见的错误,它会默默地失败。但是,如果你使用 HTML 辅助函数,你就不会犯同样的错误

echo heading('This is a header',2);

至于可读性,任何熟悉 PHP 的人都应该能够轻松理解任一代码片段。

【讨论】:

  • 那么,你想说这不会在性能方面产生很大的影响吗?你呢,你真的在​​你的项目中使用 html helper 吗?
  • @Darko:这会有所不同,因为使用助手会更慢。但是,差异将非常非常小,以至于我将其称为微优化。我对锚标签和表单字段等元素使用助手,因为助手规范了 URL 等。对于标题等,我发现只使用普通 HTML 更容易。
猜你喜欢
  • 2015-06-03
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多