0

我有一个存在的问题,希望有人能回答。
为什么 Cakephp 控制器需要附加“控制器”字样?

我知道命名约定是什么,但它没有说明为什么会这样(好吧,也许它写在某个地方,但我还没有找到它)。

Controller 类名是复数,CamelCased,以 Controller 结尾

我们没有PostModel.php,WhateverModel.phpviewView.ctp, addView.ctp。对于模型,它只是Post.phpor Item.php。有了视图......好吧,任何东西,但不需要在动作结束时附加“视图”。为什么与控制器有区别?

我已经看到了一些问题,其中错误是他们有ItemModel.php,并且我理解如果控制器存在混淆的原因ItemsController.php(尽管如此,这不是不阅读文档的借口)。

我想也许是为了帮助避免拐点问题,就像模型一样,如果我们不添加控制器部分Fish.php,控制器也会是。Fish.php但是文件夹的分离非常清晰,并且有

/Controller
   Fish.php
/Model
   Fish.php

真的不是问题……或者是吗?

我的问题是为什么,而不是控制器的命名约定如何,以及除了“只是因为”之外是否还有任何合乎逻辑的原因。即使是“我们在 0.0.1 版本中就这样开始了,然后改变它为时已晚”就足够了。

4

1 回答 1

6

模型是唯一没有附加类型的类。

Something <- model class
SomethingBehavior <- behavior class
SomethingHelper <- helper class
SomethingController <- controller class
SomethingComponent <- Component class
SomethingView <- View class

您不能执行以下操作:

/Controller
   Fish.php
/Model
   Fish.php

曾经尝试过将两个具有相同类名的类导入 PHP 中吗?(CakePHP 自 2.x 起期望类名与文件名匹配)

Fatal error: class `Whatever` already exists (or something similar)

在 PHP 5.3 和命名空间之前,必须这样做才能避免这些致命错误。由于 CakePHP 2.x 和更低版本的目标是低于 5.3 的 PHP 版本和命名空间,所以这就是所做的。

另外,为了使导入类更容易,文件名映射到类名,这就是为什么您不能将 Fish.php 与类 FishController 一起使用。这肯定会避免致命错误,但 Cake 不会加载这样的类。

尽管 CakePHP 3.x 将针对 PHP 5.4,控制器/组件/行为等将继续存在以实现向后兼容性(可能,它仍然存在于最新的3.x 分支中)

于 2013-05-27T16:59:02.843 回答