tuto Mvc : le model ne s'instancie pas automatiquement

Par JowRick, il y a 13 ans


Bonjour cela fait au moins deux heures que je cherche à comprendre pourquoi lorsque je fais des test dans la fonction constructrice de mon moi ceux-ci n’apparaissent pas, à faire de douter de mon code j'ai recommencé à créer ce système de model au moins un dizaine de fois. A ce stade là je commence à craquer mentalement.

Le code de ma fonction load Model

public function loadModel($name)
    {
        $file = SERVER.DS.'Models'.DS.$name.'.php';
        require_once($file);
        if (!isset($this->$name)) {
            $this->$name = new $name();
        }
    }

Le code de mon model

class Model
{
    public $db = 'default';
    public function __construct()
    {
        $conf = Configurations::getConfigs('databases',$this->db);
        try {
                    $db = new PDO('mysql:host='.$conf->host.';dbname='.$conf->database.';',$conf->login,$conf->password);
        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }
}

pour l'instant je me suis arrêté ici car j'avais besoin d'une pause.

Edit : J'ai changé certaines constantes et ma classe Configurations est en lien avec un fichier en JSON

19 réponses

RedaElkhayat, il y a 13 ans

Salut,
il faut créer des sous models qui héritent des méthodes et des variables celles de la class mère Model. après tu peux utiliser la fonction loadModel("nom du model");

JowRick, il y a 13 ans

Je sais c'est déjà fait et c'est bien là le problème c'est comme si le sous model s'instanciait mais pas le model

Tackacoder, il y a 13 ans

Bonjour,
Tu peux montrer a quoi ressemble un de tes models que tu charges.

RedaElkhayat, il y a 13 ans

Oui, comme exothermique a dit, passe nous le code de tes models.

JowRick, il y a 13 ans

bah pour l'insatnt il ne fait rien et il n'a aucune fonction

mon model Post

<?php
class Post extends Model
{

}
Tackacoder, il y a 13 ans

Ok, et dans ta fonction loadModel(), le fichier Model Post est bien chargé?

JowRick, il y a 13 ans

oui voici mon PagesController

class PagesController extends Controller
{
    public function view($id)
    {
        $this->loadModel('Post');
    }
}

C'est pas grave je vais recommencé tout mon projet

RedaElkhayat, il y a 13 ans

je crois que le model a bien chargé. et la connexion BDD est bien effectué le moment ou il n'a pas affiché aucune erreur.
pour tester, je te propose d'ajouter un

echo "Blabla";

dans ton constructeur de la class Model.

JowRick, il y a 13 ans

bah je l'avais déjà fait et ce c'est qui m'a mis la puce à l'oreille. De plus quand je fait

var_dump($this->table)

Dans le model il me retourne false et non 'posts' et vu que tout ce fait dans le constructeur je me suis dis qu'il y avais un problème

RedaElkhayat, il y a 13 ans

c'est normale, ton code n'est pas encore complet. :)

JowRick, il y a 13 ans

ah mais même après il ne fait rien ce n'est que quand je fais

parent::__construct()

dans mon model post que mes debugs s'affichent

RedaElkhayat, il y a 13 ans

Passe moi ton includes.php

JowRick, il y a 13 ans

bah c'est déjà inclus j'ai vérifié une dizaine de fois et j'ai changé la ligne d'inclusion du model pour voir et ça n'a rien changé
sinon mon Includes.php c'est ça

require 'Configurations.php';
require 'Request.php';
require 'Router.php';
require 'Controller.php';
require 'Model.php';
require 'Dispatcher.php';
RedaElkhayat, il y a 13 ans

il faut que l'inclusion du Model.php soit avant Controller.php.

JowRick, il y a 13 ans

je t'ai montré le code actuel de mon Includes.php

RedaElkhayat, il y a 13 ans

Je sais.
remplace maintenant le code de ton includes.php avec ça

require 'Configurations.php';
require 'Request.php';
require 'Router.php';
require 'Model.php';
require 'Controller.php';
require 'Dispatcher.php';
JowRick, il y a 13 ans

toujours rien

Dreamsanon, il y a 12 ans

Même problème exactement ... C'est bien chiant :(

Dreamsanon, il y a 12 ans

Avez-vous trouvez la solution ?