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


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

我是cakePHP 3的新手。我创建了一个控制器和模型,在那里我调用一个函数从数据库中获取所有用户。但是当我运行下面的代码时,我将得到以下错误"调用布尔值上的成员函数get_all_users() "

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

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

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

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

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

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

您的自定义方法应该放在一个表类中,即UsersTable类,然后您应该通过

访问它
$this->Users

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