在布尔值上调用成员函数意味着什么以及如何修复

2022-08-30 23:31:33

我是 CakePHP 3 的新手。我创建了一个控制器和模型,在其中调用一个函数以从数据库中获取所有用户。但是当我运行下面的代码时,我会收到以下错误“调用成员函数get_all_users() on boolean”。

这个错误是什么意思,我该如何解决这个问题?

用户.php(型号)

namespace App\Model\Entity;
use Cake\ORM\Entity;

class User extends Entity {

    public function get_all_users() {
        // find users and return to controller
        return $this->User->find('all');
    }
}

用户控制器.php(控制器)

namespace App\Controller;
use App\Controller\AppController;

class UsersController extends AppController {

    public function index() {
        // get all users from model
        $this->set('users', $this->User->get_all_users());
    }
}

答案 1

通常,当使用控制器不存在的属性时,会发生此错误。

与控制器名称匹配的表不需要手动加载/设置为属性,但即使它们最初也不存在,尝试访问它们会导致调用控制器 magic getter 方法,用于延迟加载属于控制器的表类,并在出错时返回, 这就是它发生的地方,您将在布尔值上调用一个方法。false

https://github.com/cakephp/.../blob/3.0.10/src/Controller/Controller.php#L339

在你的例子中,问题是(单数,对于实体)与预期的不匹配(复数,对于表),因此找不到匹配的表类。UserUsers

您的自定义方法应改为放在表类中,即类,然后应通过以下方式访问该类UsersTable

$this->Users

你可能想重读文档,实体不查询数据(除非你是实现延迟加载),它们代表一个数据集!


答案 2

推荐