web-dev-qa-db-fra.com

Que signifie appeler une fonction membre sur booléen et comment y remédier

Je suis nouveau avec cakePHP 3. J'ai créé un contrôleur et un modèle où j'appelle une fonction pour obtenir tous les utilisateurs de la base de données. Mais lorsque j'exécute le code ci-dessous, j'obtiens l'erreur suivante "Appel à une fonction membre get_all_users () sur booléen" .

que signifie cette erreur et comment puis-je résoudre ce problème?

ser.php (modèle)

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 (contrôleur)

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

Généralement, cette erreur se produit lorsqu'une propriété inexistante d'un contrôleur est utilisée.

Les tables qui correspondent au nom du contrôleur n'ont pas besoin d'être chargées/définies manuellement sur une propriété , mais elles n'existent même pas initialement, essayer d'y accéder provoque l'invocation de la méthode getter magique des contrôleurs, qui est utilisée pour le chargement paresseux de la classe de table qui appartient au contrôleur, et elle renvoie false en cas d'erreur, et c'est là que cela se produit, vous va appeler une méthode sur un booléen.

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

Dans votre cas, le problème est que User (singulier, pour les entités) ne correspond pas au Users attendu (pluriel, pour les tables), donc aucune classe de table correspondante ne peut être trouvée.

Votre méthode personnalisée doit aller dans une classe de table à la place, la classe UsersTable, à laquelle vous devez ensuite accéder via

$this->Users

Vous voudrez peut-être relire les documents, les entités ne demandent pas de données (sauf si vous implémentez par exemple le chargement différé), elles représentent un ensemble de données!

16
ndm