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());
}
}
通常、このエラーは、コントローラーの存在しないプロパティが使用されている場合に発生します。
コントローラ名と一致するテーブルは、 プロパティに手動でロード/設定する である必要はありませんが、存在していなくてもかまいません最初に、それらにアクセスしようとすると、コントローラーのマジックゲッターメソッドが呼び出されます。これは、コントローラーに属するテーブルクラスの遅延ロードに使用され、エラー時にfalse
を返します。ブール値でメソッドを呼び出します。
https://github.com/cakephp/.../blob/3.0.10/src/Controller/Controller.php#L339
あなたの場合、問題はUser
(エンティティの場合は単数形)が予想されるUsers
(テーブルの場合は複数形)と一致しないため、一致するテーブルクラスが見つからないことです。
カスタムメソッドは、代わりにUsersTable
クラスのテーブルクラスに配置する必要があります。その後、このクラスにアクセスする必要があります
$this->Users
ドキュメントを読み直したい場合がありますが、エンティティはデータをクエリしません(たとえば、遅延読み込みを実装している場合を除き)、データセットを表します!