【问题标题】:Blog design using CakePHP使用 CakePHP 设计博客
【发布时间】:2013-01-16 05:32:46
【问题描述】:

我正在使用 CakePHP 构建一个博客(只是一个个人项目,没什么大不了的),目前我有下一个控制器:

  • PostsControllers(操作:索引、关于、存档、显示、编辑)
  • UsersControllers(操作:注册、登录、注销)

我认为像“index”、“about”和“archive”这样的操作应该放在不同的控制器中(比如 BlogsController),因为它们不是与单个帖子相关的操作。

我一直在互联网上搜索,我发现大多数人只使用一个控制器来处理博客和帖子操作(BlogsController 或 PostsController)。

所以我的问题是:我应该为“索引”、“关于”、“存档”等操作设置一个单独的控制器吗?

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    不,您应该为每个离散实体类型保留一个控制器(例如,PostUserComment)。然后,您可以使用 /posts/view/5 等操作来查看 ID 为 5 的博客文章。如果您想让 URL 反映博客特性,则可以为 /blog/5/blog/posts/5 映射路由(请参阅 CakePHP documentation on routing)。

    如果您打算创建一个不仅仅是博客的网站,您还可以考虑使用 CakePHP 创建一个博客插件(同样,see the documentation)。然后,您所有与博客相关的操作都将被限制在一个用于组织的插件中。因此,这也使得为其他网站部署博客代码变得更加容易。

    【讨论】:

    • 那么,我的 PostsController 是否有类似“关于”的操作(关于博客,而不是关于帖子),即使“关于”不是与帖子相关的操作?
    • @enrmarc 否。操作应仅处理它们所指的实体。如果您有特定于博客本身的操作,那么这将保证BlogController 没有模型(例如,public $model = array();)。然而,关于页面听起来非常静态,因此最好将其作为/app/views/pages/ 目录中的页面作为about.ctp 文件。然后,您可以根据需要为/pages/about 创建一条到/blog/about 之类的路线。
    • 谢谢。是的,我的 about 页面基本上是静态的,但有一个带有最近帖子的侧边栏(我使用一个元素来重用该视图:sidebar.ctp)。但是 sidebar.ctp 需要一个 $posts 变量来显示最近的帖子......所以,我需要在 BlogsController 中使用 about 操作,对吧?
    • -1:为每个域实体拥有单独的控制器意味着表示与模型层紧密耦合。 这是一个人能做的最糟糕的事情。.
    • @tereško 这正是 CakePHP 所鼓励的设计,所以如果你觉得这是你能做的最糟糕的事情,那就找一个新的框架。我在这里从未提到任何关于与控制器耦合的表示逻辑。控制器特定于他们的模型,以便他们可以根据需要收集数据,然后使用控制器公开的 API 构建演示文稿。您的提议将在视图和控制器之间产生更大的耦合,因为您正在围绕应用程序视图的结构构建控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2011-07-10
    • 2012-03-22
    相关资源
    最近更新 更多