为什么我会收到此错误 - 错误:在非对象 - Cake 2.0 上调用成员函数 find()


Why do I get this error - Error: Call to a member function find() on a non-object - Cake 2.0

为什么会出现此错误?

Fatal Error
Error: Call to a member function find() on a non-object
File: /home/mycake/public_html/app/Controller/TasksController.php
Line: 7

我认为这与使用 CAKE 2.0 有关,但我认为我的控制器中的代码可能是 CAKE 1.3?我已经做了一些研究,但我不知道如何将代码更改为 CAKE 2.0。谁能帮忙?

这是任务控制器.php页面

<?php
class TasksController extends AppController {
    public $name = 'tasks';
    public function index() {
        //THIS IS THE LINE 7
        $tasks = $this->Task->find('all');
        $this->set('tasks', $tasks);
    }
}

如果您需要更多信息,请询问,因为我不确定如何使其更相关以获得答案:)

如果你的控制器被调用TasksController那么它将尝试自动实例化Task模型。您无需手动指定它。CakePHP 抛出错误的原因是因为你已经复数化了名称(模型是单数的,所以Task不是Tasks),并且也是驼峰大小写的,这意味着它们以大写字母开头(Task不是task)。

如果未设置特定控制器的属性$uses,CakePHP 会自动实例化相应的模型,因此这意味着您可能会意外地将AppController的属性$uses设置为 nullarray()

因此,请检查您是否将AppController中的$uses设置为空,或者干脆在TasksController中,用 public $uses = array('Task'); 覆盖该值。

您可以像这样尝试索引:

class TasksController extends AppController{

    public function index(){
        $this->set('tasks', $this->Task->find('all'));
    }

如果你在非对象上收到错误:调用成员函数find(),你可以输入:

$this->loadModel('Task');