什么意思调用布尔值的成员函数以及如何修复

What means Call to a member function on boolean and how to fix

我是 cakePHP 3 的新手。我创建了一个控制器和模型,我在其中调用了一个函数以从数据库中获取所有用户。 但是当我 运行 下面的代码时,我会得到以下错误 "Call to a member function get_all_users() on boolean"

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

User.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');
    }
}

UsersController.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());
    }
}

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

与控制器名称匹配的表不需要是 loaded/set to a property manually,但即使它们最初不存在,尝试访问它们也会导致控制器魔术 getter 方法被调用,这是用于延迟加载属于控制器的 table class,并且它 returns false 出错,这就是它发生的地方,你将调用一个方法布尔值。

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

在您的情况下,问题是 User(单数,对于实体)与预期的 Users(复数,对于 tables)不匹配,因此没有匹配的 table可以找到class

您的自定义方法应该放在 table class 中,而不是 UsersTable class,然后您应该通过

访问它
$this->Users

您可能需要重新阅读文档,实体不查询数据(除非您正在实施延迟加载),它们代表一个数据集!