5

我是 CodeIgniter 的初学者,仍在努力完全掌握如何最干净地使用 MVC 意识形态。

我正在编写一个基本的 CMS 系统,该系统能够对条目进行投票和关注人员等,因此,我发现自己在多个视图中使用相同或相似的代码片段,其中包括各种 html 和逻辑片段,例如:

  • 投票小组
  • 关注/取消关注面板
  • 登录/注销面板
  • 检查用户是否登录的代码等...

我想知道将这段代码放在哪里以便统一?我在想一个帮手是要走的路吗?如果我在控制器中声明助手,可以从相应的视图中调用它吗?

一些元素是动态的 - 例如关注/取消关注按钮 - 它需要检查您是否已经关注用户并显示适当的按钮,这需要模型进行检查。我现在拥有的是所有逻辑都在控制器中,它返回一个适当的按钮,但是在控制器返回中返回形成的 html 代码似乎很奇怪。它应该更像:

  • 控制器检查您是否正在关注某人
  • 控制器将布尔值传递给视图
  • 视图用这个值调用助手来绘制相应的按钮

另外,作为第二个问题,我一直在 foreach 循环中对 mysql 数组进行大量循环,以处理从视图返回的 mysql 结果。似乎我的观点变得有些复杂,但是我想不出另一种方法来做到这一点,尽管也许这也应该在另一个助手中完成?

抱歉,如果这是一个幼稚或重复的问题,确实围绕这个主题进行了很多讨论,但它并不总是容易与另一个项目相关联。

4

3 回答 3

0

就处理用户登录而言,您可能希望使用静态类和单例设计模式,这将允许您检查特定用户是否已登录或未在应用程序的任何位置登录。这里有一个很好的教程 http://www.phpandstuff.com/articles/codeigniter-doctrine-scratch-day-4-user-login

加载助手,我不相信将它加载到您的控制器中会自动将其加载到您的视图中。我认为您必须在视图文件中重新加载帮助程序,或者您必须自动加载帮助程序。(不记得头顶,但我很确定)。

关于遍历 mysql 结果,您应该始终为此使用模型。从您的应用程序中获取或排序信息的任何功能都应在模型中完成。然后,在您的视图文件中,您循环浏览结果并按照您选择的方式格式化数据。

于 2011-03-21T18:58:43.540 回答
0

助手当然是模块化任何非DRY的一种方法。另一种是使用局部视图。CodeIgniter看起来支持局部视图。 这是一个很好的细分——不是特定于 PHP 的,但讨论应该是不可知的。

于 2011-03-21T18:36:34.517 回答
0

在开发具有您提到的投票功能的http://newspapair.com时,我使用帮助程序和自定义类将功能分布在多个视图中。

Helper - 具有没有类的功能。因此,可以将一个独立的函数或一组函数放在一个文件中并保存为助手。

例如,我为 NewsPapair 使用了具有通用表单处理功能的助手,而不是静态类。但这不是要做的“最佳实践”。我这样做是因为我已经拥有了以前项目中的功能。

就 MySQL 结果的循环而言,尝试编写一个允许 DB 服务器完成繁重工作的查询。这将使您的代码更有效率。也许用示例代码询问有关特定查询的问题。另外,在您的模型中收集所有数据。

于 2011-03-21T19:35:36.763 回答