2011-03-21 38 views
4

我是CodeIgniter的初学者,仍然很难完全掌握如何最干净地使用MVC思想。初学者CodeIgniter概念 - 可重用的视图代码,要去哪里? (Helper?)

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

  • 投票面板
  • 跟踪/停止追随面板
  • 登录/注销面板
  • 代码检查,如果用户在登录等...

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

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

  • 控制器检查,如果你正在关注的人
  • 控制器传递一个布尔值到视图
  • 视图调用具有此值的助手绘制相应的按钮

另外,作为第二个问题,我一直在循环遍历foreach循环中的mysql数组,以处理从视图返回的mysql结果。似乎我的观点有些复杂,但我想不出另一种方式去做,但也许这应该在另一个帮手中完成呢?

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

+0

感谢您到目前为止的答案 - 我正在做模型中的所有DB提取,但我在视图中做了相当多的逻辑。例如。我让控制器在结果中加载*条目*,然后将每个*条目的所有*票*加载到另一个结果中。然后,该视图有一个嵌套的foreach循环来显示每个条目,然后显示该条目的相应投票,这是'好吗'还是应该以另一种方式接近它? @ thrice801 - 我只是想知道为什么这个用户提到在视图中加载助手不是首选 - http://stackoverflow.com/questions/804399/codeigniter-create-new-helper – waffl 2011-03-22 01:08:45

回答

0

帮助者当然是一种模块化不是DRY的东西。另一个是使用部分视图。 CodeIgniter 看起来像喜欢它支持部分视图。 Here's一个很好的细分 - 不是PHP的具体细节,但讨论应该是不可知的。

0

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

加载助手,我不相信加载它的控制器会自动加载它在你的视图。我认为你必须重新加载你的视图文件中的助手,或者你必须自动加载助手。 (不记得顶部的头,但林肯定)。

关于通过mysql结果循环,你应该总是使用这个模型。任何从您的应用程序中获取或分类信息的功能都应该在模型中完成。然后,在您的视图文件中,循环查看结果并格式化数据。

0

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

助手 - 没有类的功能。所以一个独立的函数或一组函数可以放在一个文件中并保存为帮助程序。

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

至于循环访问MySQL结果,请尝试编写一个查询,以便数据库服务器完成繁重的工作。这会让你的代码更有效率。也许用示例代码问一个关于具体查询的问题。另外做你的模型中的所有数据收集。