【问题标题】:CodeIgniter and controllersCodeIgniter 和控制器
【发布时间】:2011-12-28 17:30:05
【问题描述】:

我已经开始使用 CodeIgniter,而且我似乎做得很好。不过我遇到了一个问题。

我有一个名为 Articles 的控制器。该网站的用户可以执行以下操作:

  • 按 slug 名称获取文章
  • 获取某个类别中的文章列表
  • 获取具有 x 标记名称的文章列表

我的问题是我应该创建 3 个单独的控制器:

  • Article.php - 单篇文章
  • Category.php - 对于有 x 类别的文章列表
  • Tag.php - 对于有 x 标签的文章列表

或者,我应该把所有东西都放在Article.php吗?

我只是想弄清楚传统的做事方式。

【问题讨论】:

  • 由于所有三个函数都返回文章,我会选择只使用一个文章控制器。

标签: php codeigniter


【解决方案1】:

这取决于你(当然),但听起来你想要一个控制器,只要标签和类别本身没有任何意义,没有文章。

为了语义起见,我会将其重命名为Articles.php,并带有“s”。然后你将拥有:

/articles/category/{$category_id}

其中“类别”是类/控制器Articles 的方法。请记住也要更改您的控制器类名称。

我可能会将“tags”方法重命名为“tagged”,类似于 Stack Overflow 所做的那样,因此 url 更有意义:

/articles/tagged/{$tag_slug}

类似于:

http://stackoverflow.com/questions/tagged/codeigniter

对于个别文章,创建一个名为“view”的方法:

/articles/view/{$article_slug}

如果“标签”或“类别”是独立的实体,或者可以容纳比文章更多的东西,您可能希望让它们各自成为自己的控制器,但在这种情况下,我认为您不需要这样做。

【讨论】:

  • 有效点。如果我要使用多个控制器,它们将只包含 1 个方法,即“{class}/{method}/{slug}”。我现在只能坚持使用一个控制器。只要这样做是可以接受的。我不仅在学习使用 CI,而且还在学习使用 MVC 模式时的常规做法。感谢您的评论。
  • 请记住,没有规则,只有约定——这些会因人而异。做对你有用的事,并从经验中学习。如果您最终使用每个控制器只有一个方法,请查看 CI _remap() 方法或使用 routes.php 通过 index() 方法路由所有内容并保持 URL 整洁。
【解决方案2】:

我个人通常通常使用 1 个控制器并将所有内容都放入其中。有些人在他们网站的每个页面上都使用了一个控制器,以便他们的网址更好地反映。

如果您为每个页面使用 1 个控制器,您将拥有类似的网址

example.com/blog/article
example.com/blog/about
example.com/blog/contact

如果你为每个页面使用一个控制器,你可以有这样的网址

example.com/blog
example.com/about
example.com/contact

显然,在每个控制器中都有一个索引函数。

在您的情况下,我会使用 1 个具有不同功能的控制器来处理标签/文章/等。

【讨论】:

    【解决方案3】:

    如何做到这一点完全取决于您,但我个人会将它放在一个控制器中,并为其提供不同的方法来显示数据。我也认为这是一种更传统的方式,但它仍然取决于项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      相关资源
      最近更新 更多