Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CakePHP设计博客_Php_Cakephp - Fatal编程技术网

使用CakePHP设计博客

使用CakePHP设计博客,php,cakephp,Php,Cakephp,我正在使用CakePHP构建一个博客(只是一个个人项目,没什么大不了的),现在我有了下一个控制器: PostsController(操作:索引、关于、存档、显示、编辑) UsersController(操作:注册、登录、注销) 我认为像“index”、“about”和“archive”这样的操作应该放在不同的控制器(比如BlogsController)中,因为它们不是与单个帖子相关的操作 我一直在互联网上搜索,我发现大多数人在博客和帖子操作中只使用一个控制器(BlogsController或

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

  • PostsController(操作:索引、关于、存档、显示、编辑)
  • UsersController(操作:注册、登录、注销)
我认为像“index”、“about”和“archive”这样的操作应该放在不同的控制器(比如BlogsController)中,因为它们不是与单个帖子相关的操作

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


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

否,您应该为每个离散实体类型(例如,
Post
User
Comment
)保留一个控制器。然后,您可以使用诸如
/posts/view/5
之类的操作来查看ID为
5
的博客文章。如果要使URL反映博客内容,则可以映射
/blog/5
/blog/posts/5
的路径(请参阅)


如果你计划创建一个不仅仅是博客的网站,你也可以考虑用CAKEPHP创建博客插件(再一次)。然后,所有与博客相关的操作都将被限制在组织的单个插件中。因此,这也使得为其他网站部署博客代码变得更容易

否,您应该为每个离散实体类型保留一个控制器(例如,
Post
User
Comment
)。然后,您可以使用诸如
/posts/view/5
之类的操作来查看ID为
5
的博客文章。如果要使URL反映博客内容,则可以映射
/blog/5
/blog/posts/5
的路径(请参阅)


如果你计划创建一个不仅仅是博客的网站,你也可以考虑用CAKEPHP创建博客插件(再一次)。然后,所有与博客相关的操作都将被限制在组织的单个插件中。因此,这也使得为其他网站部署博客代码变得更容易

因此,我的PostsController可以执行类似于“关于”(关于博客,而不是关于帖子)的操作,即使“关于”不是与帖子相关的操作吗?@enrmarc No。操作应该只处理它们引用的实体。如果您有特定于博客本身的操作,那么这将保证一个没有模型的
BlogController
(例如,
public$Model=array();
)。然而,about页面听起来非常静态,因此最好是作为
/app/views/pages/
目录中的页面作为
about.ctp
文件。然后,如果愿意,您可以为
/pages/about
创建到类似
/blog/about
的路径。谢谢。是的,我的about页面基本上是静态的,但有一个包含最近文章的侧栏(我使用一个元素来重用该视图:sidebar.ctp)。但是sidebar.ctp需要一个$posts变量来显示最近的帖子。。。所以,我需要一个关于BlogsController中的操作的
,对吗?-1:为每个域实体提供单独的控制器意味着表示与模型层紧密耦合。这是一个人能做的最糟糕的事情。@tereško这正是CakePHP鼓励的设计,所以如果你觉得这是你能做的最糟糕的事情,那么就找一个新的框架。我在这里从来没有提到任何关于表示逻辑与控制器耦合的事情。控制器是特定于其模型的,因此它们可以根据需要收集数据,然后使用控制器公开的API构建表示。您的建议将在视图和控制器之间创建更大的耦合,因为您是围绕应用程序视图的结构来构建控制器的。因此,我的PostsController具有类似“关于”(关于博客,而不是关于帖子)的操作可以吗即使“关于”不是一项与帖子相关的行动?@enrmarc否。行动应该只处理他们提到的实体。如果您有特定于博客本身的操作,那么这将保证一个没有模型的
BlogController
(例如,
public$Model=array();
)。然而,about页面听起来非常静态,因此最好是作为
/app/views/pages/
目录中的页面作为
about.ctp
文件。然后,如果愿意,您可以为
/pages/about
创建到类似
/blog/about
的路径。谢谢。是的,我的about页面基本上是静态的,但有一个包含最近文章的侧栏(我使用一个元素来重用该视图:sidebar.ctp)。但是sidebar.ctp需要一个$posts变量来显示最近的帖子。。。所以,我需要一个关于BlogsController中的
操作的
,对吗?-1:为每个域实体提供单独的控制器意味着表示与模型层紧密耦合。这是一个人能做的最糟糕的事情。@tereško这正是CakePHP鼓励的设计,所以如果你觉得这是你能做的最糟糕的事情,那么就找一个新的框架。我在这里从来没有提到任何关于表示逻辑与控制器耦合的事情。控制器是特定于其模型的,因此它们可以根据需要收集数据,然后使用控制器公开的API构建表示。您的建议将在视图和控制器之间创建更大的耦合,因为您正在围绕应用程序视图的结构构建控制器。