cakePHP项目,文件夹、页面、函数的组织

cakePHP项目,文件夹、页面、函数的组织,cakephp,controller,project-organization,Cakephp,Controller,Project Organization,我是cakePHP新手,我想知道一个“实时”网站是如何做到这一点的 我认为有两种可能性: 1) 在其(扩展的)AppController中有一个控制器具有一组页面(函数) 2) 有许多控制器,每个控制器的(扩展)AppController中都有少量页面(函数) (你可能已经知道我的问题了,但我也要用另一种方式说) 我应该把我的联系人页面放在一个单独的控制器中而不是我的博客页面吗?(我有预感答案是肯定的。)为什么 您不需要为所有内容创建控制器。事实上,你不应该这样做,因为有更好的方法。你拥有的静态

我是cakePHP新手,我想知道一个“实时”网站是如何做到这一点的

我认为有两种可能性:

1) 在其(扩展的)AppController中有一个控制器具有一组页面(函数)

2) 有许多控制器,每个控制器的(扩展)AppController中都有少量页面(函数)

(你可能已经知道我的问题了,但我也要用另一种方式说)


我应该把我的联系人页面放在一个单独的控制器中而不是我的博客页面吗?(我有预感答案是肯定的。)为什么

您不需要为所有内容创建控制器。事实上,你不应该这样做,因为有更好的方法。你拥有的静态页面越多,它就越失控

用于静态页面

将pages_controller.php从cake/libs/controller文件夹复制到app/controllers文件夹。将以下代码添加到display()操作:

然后,修改routes.php文件以添加各种静态页面:

Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about'));
Router::connect('/contact', array('controller' => 'pages', 'action' => 'display', 'contact'));
现在,联系人表单是一个静态页面,但是它附加了一些逻辑。因此,您可以转到PagesController,专门为此(或任何其他不只是静态的页面)创建一个操作:

基本上,路由将静态页面请求定向到页面控制器的
display()
操作。显示操作检查是否存在同名的方法。如果是,则执行该操作并显示pages/{page}.ctp视图

用于非静态页面,如博客

现在,这肯定需要一个模型。事实上,多个模型(Post有许多注释,Post HABTM标签)。为了操作和访问这些不同的模型,最好将代码放在单独的控制器中

很多人喜欢根据自己的URL命名控制器。例如,如果他们想要一个URL,比如
/blog
,他们就将控制器命名为BlogController

我更喜欢的一种方法是使用路由来获取我想要的URL,并按照CakePHP约定保留控制器的名称

PostsController将控制Post模型和相关模型。但是如果我想让
/blog
URL显示所有帖子的列表,我会写一条路径将其指向
/posts/index

Router::connect('/blog', array('controller' => 'posts', 'action' => 'index'));
你也可以有额外的路线。示例:
/blog/2010/06/10/whats-in-a-post
指向
/posts/view/


同样,这只是一个可能的例子。最后,您应该坚持您认为有助于为您和您的团队组织代码的方法。

您不需要为所有内容创建控制器。事实上,你不应该这样做,因为有更好的方法。你拥有的静态页面越多,它就越失控

用于静态页面

将pages_controller.php从cake/libs/controller文件夹复制到app/controllers文件夹。将以下代码添加到display()操作:

然后,修改routes.php文件以添加各种静态页面:

Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about'));
Router::connect('/contact', array('controller' => 'pages', 'action' => 'display', 'contact'));
现在,联系人表单是一个静态页面,但是它附加了一些逻辑。因此,您可以转到PagesController,专门为此(或任何其他不只是静态的页面)创建一个操作:

基本上,路由将静态页面请求定向到页面控制器的
display()
操作。显示操作检查是否存在同名的方法。如果是,则执行该操作并显示pages/{page}.ctp视图

用于非静态页面,如博客

现在,这肯定需要一个模型。事实上,多个模型(Post有许多注释,Post HABTM标签)。为了操作和访问这些不同的模型,最好将代码放在单独的控制器中

很多人喜欢根据自己的URL命名控制器。例如,如果他们想要一个URL,比如
/blog
,他们就将控制器命名为BlogController

我更喜欢的一种方法是使用路由来获取我想要的URL,并按照CakePHP约定保留控制器的名称

PostsController将控制Post模型和相关模型。但是如果我想让
/blog
URL显示所有帖子的列表,我会写一条路径将其指向
/posts/index

Router::connect('/blog', array('controller' => 'posts', 'action' => 'index'));
你也可以有额外的路线。示例:
/blog/2010/06/10/whats-in-a-post
指向
/posts/view/


同样,这只是一个可能的例子。最后,你应该坚持你认为有助于你和你的团队保持代码有序的方法。

…我不能将“organization”拼写为crap lol…我也不能将“organization”拼写为crap lol。太棒了,这与我想知道的已经足够接近了。另一件有帮助的事情是,有人在另一个帖子里说“胖模特,瘦控制器”,当我读到这篇文章时,我有了我的“啊哈!”回答得很好,我从中学到了很多。比蛋糕书更好这是怎么回事。我有我的索引页是在网页控制器,我希望有一个简单的形式,它允许用户注册到一个通讯。我不想创建一个索引控制器来处理表单提交。在表单创建方法中,我可以这样做$this->form->create('Page',array('action'=>'newsletter')),其中newsletter是我的页面控制器中的一种方法吗?是的,可以。但是你需要使用“url”选项,而不是FormHelper::create-
$this->Form->create('Page',array('url'=>array('action'=>'newsletter')))
--如果你需要更多的帮助,你最好问一个单独的问题。太棒了,这与我想知道的已经足够接近了。另一件有帮助的事情是,有人在另一个帖子里说“胖模特,瘦控制器”,当我读到这篇文章时,我有了我的“啊哈!”回答得很好,我从中学到了很多。比蛋糕更好