我有一个存在问题,希望有人能回答 为什么Cakephp控制器需要附加“控制器”字?
我知道什么是naming convention,但它没有说明为什么会这样(好吧,也许它写在某处,但我还没有找到它。)
控制器类名是复数,CamelCased,以控制器结尾
我们没有PostModel.php
,WhateverModel.php
或viewView.ctp
,addView.ctp
。对于模型,它只是Post.php
或Item.php
。视图是......好吧,任何东西,但在动作结束时不需要附加“视图”。为什么与控制器存在差异?
我已经看到一些问题,其中错误是他们有ItemModel.php
,我理解为什么控制器是ItemsController.php
的混淆(尽管如此,这不是一个不读取的借口)文档)。
我想也许是为了帮助避免变形问题,比如使用Fish.php
模型,如果我们没有添加控制器部分,控制器也会Fish.php
。但文件夹的分离非常清楚,并且
/Controller
Fish.php
/Model
Fish.php
不是真正的问题......或者是它?
我的问题是为什么,而不是如何控制器的命名约定是这样的,并且除了“只是因为”之外还有任何逻辑原因。即使是“我们在版本0.0.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)