IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

framework MVC et POO [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut framework MVC et POO
    Bonjour à tous. Après un long moment d'absence me voici à nouveau sur ce forum. Donc sincères salutations à tous les admins et modérateurs.

    Un petit casse-tête pour vous très chers amis

    J'explique.

    Je (re-)programme un framework et je me trouve dans une situation un peu bizarre.

    J'ai une table MySQL que je vais appeler pour l'occasion... table
    J'ai programmé un FrontController qui appelle un modèle et une vue.
    Si je fais dans le fichier index.php le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql="SELECT * FROM table";
    $oReq=$oLink->query($sql);
    $row=$oReq->fetchAll(PDO::FETCH_ASSOC);
    print_r($row);
    Cela fonctionne. Donc mon code, et ma requête SQL, sont valides.

    Maintenant si je place le code PDO dans le modèle et le print_r dans la vue, ça fonctionne également. Bien-sûr, je fais dans le fichier index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    require_once('models/fichier.php');
    require_once('vue/fichier.php');
    Maintenant, si je passe par le FrontController (FC), il me met les message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function query() on a non-object in  C:\xampp\htdocs\cdtda12\models\ModelAccueil.php on line x
    Alors je teste le FC en écrivant dans le modèle et dans la vue et ça fonctionne correctement. Donc mon FC est bon également.

    Alors ??? PHP bogue ? Non je plaisante... je crois trop en ce langage pour penser une fraction de seconde qu'il bug
    Quelqu'un aurait-il une réponse à ce qui se passe ?

    Merci d'avance pour moi et tous ceux qui en retireront quelque chose.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  2. #2
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Points : 51
    Points
    51
    Par défaut
    salut,

    tu n'a pas de connexion ouverte
    donc pas d'instance objet.

    bon code

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Je connais que le principe de MVC, à peine regardé un CakePhp, donc je ne pourrais pas t'aider sur le comment goupiller ça.

    Je me tiens uniquement au message d'erreur, qui selon moi $oLink serait inexistant ou alors pas une instance de PDO dans le index.php.


    Si tu fais un var_dump($oLink) juste avant la requête, ça donne quoi ?


    Arfff ... @backdown bien plus rapide
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut merci pour votre aide
    Effectivement, j'ai fais un var_dump($oLink) et la valeur était NULL.

    En fait il s'agit d'un problème de portée de variable. Je suis obligé de refaire dans le modèle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $oC=new MaClass();
    $oLink=$oC->connexionBDD();
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    En fait il s'agit d'un problème de portée de variable. Je suis obligé de refaire dans le modèle
    Si on est obligé de ré-instancier PDO car c'est propre à une structure MVC, c'est pas demain que je m'y mettrais alors (au MVC) ... ça me semble plutôt une contrainte.

    Bon, ce n'est pas en ces quelques minutes que je me suis amélioré sur le MVC, mais j'ai plutôt tendance à penser qu'il y a "anguille sous roche", une co*uille par là non ?

    T'es vraiment obligé de créer un nouvel objet ? Tu ne peux pas le conserver, faire la requête ailleurs et "passer" les infos (sous forme de tableau par exp.), ou le transmettre, etc ... ?

    Ceci dit, si c'est résolu, c'est résolu
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    ben en faite, à ce que je vois, tu n'arrives pas à utiliser les objets entre chaque éléments de ton MVC ...

    ton FrontController est +/- en charge de distribuer les ordres à chaque éléments non ? il appel le controlleur récupère les données et les transferts à la vue, ... ... non ?

    Bref dans tous les cas, c'est un peu comme ça que j'avais monté mon MVC une class Principale qui suit les infos, donc lorsque je créais un controlleur, je lui transferais en parametre le frontController :

    new MyController($this);

    celui-ci contenant la liaison avec la vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class FrontController {
      function __construct($name, $action="index"){
        $this->view = new {$name.'View'}($this);
        $this->model = new {$name.'Model'}($this);
        $this->controller = new {$name.'Controller'}($this);
        $this->controller->{$action}();
      }
    }
    dans le controller je conservais ce lien et pouvais à tout moment l'appeler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class newsController extend controller {
      function __construct($main){
        $this->m = $main->model;
        $this->v = $main->view;
      }
      ...
      function listNews(){
        $this->m->findAll('articleTable');
        $this->v->render('articleList');
      }
    }
    Sachant que la vue va, à ce moment là aller récupérer $this->m->fetchRows() pour lister les articles ....

    Ce n'est peut-être pas la solution idéale, ni celle recherchée, mais ça peut-être une piste

    Sinon, déclarer les différents éléments dans ton index.php et les insérer dans les différentes parties en variables globales !... pourquoi pas ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MVC]Modélisation POO avec BD
    Par fremsoi dans le forum MVC
    Réponses: 1
    Dernier message: 08/11/2005, 13h53
  2. Perdu dans tous ces framework, mvc, et template
    Par __fabrice dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 02/09/2005, 12h00
  3. [MVC] Différences entre les framework MVC push et pull ?
    Par XavierZERO dans le forum Frameworks Web
    Réponses: 5
    Dernier message: 15/01/2004, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo