控制器命名约定

时间:2013-05-27 15:49:32

标签: cakephp

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

我知道什么是naming convention,但它没有说明为什么会这样(好吧,也许它写在某处,但我还没有找到它。)

  

控制器类名是复数,CamelCased,以控制器结尾

我们没有PostModel.phpWhateverModel.phpviewView.ctpaddView.ctp。对于模型,它只是Post.phpItem.php。视图是......好吧,任何东西,但在动作结束时不需要附加“视图”。为什么与控制器存在差异?

我已经看到一些问题,其中错误是他们有ItemModel.php,我理解为什么控制器是ItemsController.php的混淆(尽管如此,这不是一个不读取的借口)文档)。

我想也许是为了帮助避免变形问题,比如使用Fish.php模型,如果我们没有添加控制器部分,控制器也会Fish.php。但文件夹的分离非常清楚,并且

/Controller
   Fish.php
/Model
   Fish.php

不是真正的问题......或者是它?

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

1 个答案:

答案 0 :(得分: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 branch