所以,我有两个蛋糕应用程序(一个是网站前端,另一个是我的管理员仪表板),我的所有模型都在我的管理应用程序上声明,所以我将它们加载到我的网站应用程序上:
App::build(
array('Model' => array(
Configure::read('Extranet.path') . 'app/Model')
), App::RESET);
这似乎工作正常,因为当我这样做时:
var_dump(App::objects('Model'), false);
我明白了:
array(19) { [0]=> string(8) "AppModel" [1]=> string(6) "Banner" [2]=> string(5) "Brand" [3]=> string(8) "Category" [4]=> string(12) "CategorySize" [5]=> string(5) "Color" [6]=> string(8) "Customer" [7]=> string(11) "EntityImage" [8]=> string(6) "Gender" [9]=> string(5) "Group" [10]=> string(5) "Image" [11]=> string(10) "Newsletter" [12]=> string(10) "Permission" [13]=> string(7) "Product" [14]=> string(12) "ProductImage" [15]=> string(4) "Size" [16]=> string(6) "Status" [17]=> string(11) "UsageStatus" [18]=> string(4) "User" } bool(false)
看起来蛋糕正在识别我的模型,但是当我尝试调用特定方法时:
<?php
class PagesController extends AppController {
public $helpers = array('Html', 'Form');
public $components = array('Paginator', 'Permission');
public $uses = array('User');
public function index() {
var_dump(App::objects('Model'), false);
$this->User->test();
$this->set('page', 'home');
}
}
我得到的只是:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test' at line 1
根据我的搜索,当蛋糕尝试执行与查询方法名称完全相同的SQL查询时,它是因为它没有找到模型类(但它在转储App ::对象时找到它) !)。
我没有找到任何关于我应该怎样去找出为什么蛋糕不能加载我的模型的地方(更让我感到困扰的是,我知道蛋糕会隐藏这个而不是尖叫我面)。
我该怎么办?
编辑: 这是cakephp docs的一段文字:
如果找不到/ app / Model中的相应文件,CakePHP将为您动态创建一个模型对象。这也意味着如果你的模型文件没有正确命名(例如,如果它被命名为ingredient.php或Ingredients.php而不是Ingredient.php),CakePHP将使用AppModel的实例而不是你的模型文件(CakePHP)假设缺失)。如果您尝试使用模型中定义的方法,或者附加到模型的行为,并且您得到的SQL错误是您正在调用的方法的名称,那么CakePHP就是一个明确的信号。无法找到您的模型,您需要检查文件名,应用程序缓存或两者。
但是,我的文件名称为User.php
,我的缓存文件夹完全为空,我的bootstrap.php上有Configure::write('Cache.disable', true);
。
找出至少哪个文件是蛋糕php试图加载的任何方向都会很好。感谢。
答案 0 :(得分:0)
三个小时和一堆var_dump之后,我发现了错误,听起来很奇怪,这只是一个改变的问题
Configure::read('Extranet.path') . 'app/Model')
到
Configure::read('Extranet.path') . 'app/Model/')
当docs明确指出:
时,这就是盲目复制而没有阅读的结果。All paths must be terminated with a directory separator.
Cakephp可能更好,但不是简单地继续而不告诉我发生了什么。