web-dev-qa-db-ja.com

ブール値のメンバー関数の呼び出しと修正方法の意味

CakePHP 3を初めて使用します。データベースからすべてのユーザーを取得する関数を呼び出すコントローラーとモデルを作成しました。しかし、以下のコードを実行すると、次のエラーが表示されます "ブール関数でget_all_users()を呼び出す"

このエラーの意味とこれを修正するにはどうすればよいですか?

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

sersController.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());
    }
}
10
CodeWhisperer

通常、このエラーは、コントローラーの存在しないプロパティが使用されている場合に発生します。

コントローラ名と一致するテーブルは、 プロパティに手動でロード/設定する である必要はありませんが、存在していなくてもかまいません最初に、それらにアクセスしようとすると、コントローラーのマジックゲッターメソッドが呼び出されます。これは、コントローラーに属するテーブルクラスの遅延ロードに使用され、エラー時にfalseを返します。ブール値でメソッドを呼び出します。

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

あなたの場合、問題はUser(エンティティの場合は単数形)が予想されるUsers(テーブルの場合は複数形)と一致しないため、一致するテーブルクラスが見つからないことです。

カスタムメソッドは、代わりにUsersTableクラスのテーブルクラスに配置する必要があります。その後、このクラスにアクセスする必要があります

$this->Users

ドキュメントを読み直したい場合がありますが、エンティティはデータをクエリしません(たとえば、遅延読み込みを実装している場合を除き)、データセットを表します!

16
ndm