初学者CodeIgniter概念 - 可重用的视图代码,去哪里? (帮手?)

时间:2011-03-21 18:12:07

标签: php mysql codeigniter application-structure

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

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

  • 投票面板
  • 关注/取消关注面板
  • 登录/退出面板
  • 检查用户是否已登录等的代码......

我想知道在哪里放这个代码以便它可以统一?我在想帮忙是怎么回事? 如果我在控制器中声明了帮助器,可以从相应的视图中调用它吗?

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

  • 控制器会检查您是否关注某人
  • 控制器将布尔值传递给视图
  • 视图使用此值调用帮助程序以绘制相应的按钮

另外,作为第二个问题,我在foreach循环中做了一些循环mysql数组来处理从视图返回的mysql结果。看起来我的观点有点复杂,但我想不出另一种方法,尽管也许这应该在另一个帮手中完成?

道歉,如果这是一个天真或重复的问题,确实有很多关于这个主题的讨论,但它并不总是容易与另一个项目相关。

3 个答案:

答案 0 :(得分:0)

助手肯定是模仿任何不是DRY的东西的一种方式。另一种是使用部分视图。 CodeIgniter 看起来就像它支持部分视图一样。 Here's一个很好的细分 - 不是PHP特定的,但讨论应该是不可知的。

答案 1 :(得分:0)

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

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

关于循环遍历mysql结果,你应该总是使用一个模型。从应用程序中获取或排序信息的任何功能都应在模型中完成。然后,在视图文件中循环显示结果并根据您的选择格式化数据。

答案 2 :(得分:0)

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

助手 - 没有课程的功能。因此,可以将独立函数或函数组放在文件中并保存为帮助程序。

例如,我使用了具有NewsPapair的通用表单处理函数的帮助程序,而不是静态类。但这不是“最佳实践”的事情。我是这样做的,因为我已经拥有了之前项目的功能。

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