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

时间:2015-08-04 15:45:58

标签: php model-view-controller cakephp-3.0

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

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

User.php(型号)

public function insert_id($id){
$result = $this->db->insert('table_with_id',$id);
return $result;
}

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

1 个答案:

答案 0 :(得分:16)

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

与控制器名称匹配的表不需要loaded/set to a property manually,但最初甚至不存在,尝试访问它们会导致调用控制器魔术getter方法,用于延迟加载表属于控制器的类,它在出错时返回false,就在它发生的地方,你将在布尔值上调用一个方法。

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

在您的情况下,问题是User(单数,对于实体)与预期的Users(复数,对于表)不匹配,因此找不到匹配的表类。

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

访问该类
$this->Users

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