控制器中未加载Cakephp 3默认模型
我有一个控制器名控制器中未加载Cakephp 3默认模型,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我有一个控制器名CodeBridgeController,还有一个模型表名CodeBridgeTable。 当我调用代码桥表时,如下所示: $this->CodeBridge->find('all')->toArray(); 此生成错误:对非对象调用成员函数find() 文件D:\php\htdocs\cake3\erp\src\Controller\CodeBridgeController.php 第25行 我认为这是一个愚蠢的问题,但我在代码中找不到任何错误,为什么在这个
CodeBridgeController
,还有一个模型表名CodeBridgeTable
。
当我调用代码桥表时,如下所示:
$this->CodeBridge->find('all')->toArray();
此生成错误:对非对象调用成员函数find()
文件D:\php\htdocs\cake3\erp\src\Controller\CodeBridgeController.php
第25行
我认为这是一个愚蠢的问题,但我在代码中找不到任何错误,为什么在这个上下文中不加载表。
当我这样称呼它时,它就起作用了
$codeBridgeTable=TableRegistry::get('CodeBridge');
$results=$codeBridgeTable->find('all')->hydrate(false)->toArray()代码>
可能产生问题的原因,需要专家建议。要解决此问题,只需在尝试使用模型之前加载模型:
$this->loadModel("CodeBridge");
$this->CodeBridge->find('all')->toArray();
最后,我找到了问题所在。
在控制器操作中,我生成了如下url:
Router::url(数组('controller'=>'codebridge','action'=>'edit')代码>生成url/cake3/erp/codebridge/edit
在camel caseRouter::url(数组('controller'=>'CodeBridge','action'=>'edit')中更改控制器名称后代码>生成url'/cake3/erp/code bridge/edit`
这解决了问题使用拐点类了解常规正确的控制器/表类。首先调试$this->CodeBridge
实际上是什么(debug($this->CodeBridge)
)。考虑到错误消息说它是非对象,我假设表实例自动加载机制甚至没有达到,和/或已经有东西分配给$this->CodeBridge
。这是cargo cult编程。当某些东西应该起作用但不起作用时,最好找出它不起作用的原因,而不是仅仅使用变通方法。遵循这一建议几乎肯定会导致与根本问题相关的其他问题。