禁用Cakephp的自动模型"功能"
在cake 1.2中,有一个功能允许开发人员不必创建模型,而让cake在运行时执行侦探工作并为我们创建模型。此过程每次都会发生,而且很整洁,但对我而言非常危险。我在某处阅读过有关此内容的信息,但现在却遇到了不利的一面。
我创建了一个包含所有文件的插件,并且一切似乎都很棒。直到我尝试使用模型的某些关联和功能。然后Cake声称我创建的这个模型不存在。我已经使用此自动模型功能将其范围缩小到蛋糕,而不是抛出和出错!所以我不知道出什么事了!
有人知道如何禁用此自动模型功能吗?这是一个好主意,但我似乎找不到我的插件出了问题的地方,错误将非常有帮助!
解决方案
总是有可能实际创建模型文件并设置var $ useTable = false。
如果这不是我们要的,并且模型及其关联确实存在,但是Cake似乎找不到它们,则必须在所有实际模型中三重检查所有模型的名称及其类名模型定义和关联定义。
抱歉,我们不能禁用自动建模。
使用
var $useTable = false;
在模型定义中。
蛋糕1.2
这是一个hack,我们需要编辑核心cake文件的丑陋习惯,但这是我的方法:
\ cake \ libs \ class_registry.php:第127行
if (App::import($type, $plugin . $class)) { ${$class} =& new $class($options); } elseif ($type === 'Model') { /* Print out whatever debug info we have then exit */ pr($objects); die("unable to find class $type, $plugin$class"); /* We don't want to base this on the app model */ ${$class} =& new AppModel($options); }
蛋糕2
Costa建议在Cake \ Utility \ ClassRegistry.php
的第95行的init函数中将$ strict更改为true。
有关初始化的信息,请参见Cake Api Docs
ClassRegistry.php初始化函数
删除所有缓存的文件(app / tmp下的所有文件,保留文件夹)
在大多数情况下,模型似乎以意外的方式起作用,通常它们不包含我们所做的更改,这是因为蛋糕正在使用模型的旧缓存版本。
呃...我们从哪里开始。首先,正如Alexander所建议的,清除应用程序缓存。
如果我们仍然得到相同的行为,则类和/或者文件名可能存在问题。
记住有关控制器的规则:
* classname: BlastsController * filename: blasts_controller.php
对于型号:
* classname: Blast * filename: blast.php
不要急于正确处理不规则的变形。