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 :

MVC récupérer des parametres


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Points : 157
    Points
    157
    Par défaut MVC récupérer des parametres
    Bonjour à tous,

    J'ai suivi de nombreux tutoriels sur la POO et MVC et je rencontre une difficulté.
    Pour commencer voici l'architecture de mon site de test:
    Nom : architecture.PNG
Affichages : 141
Taille : 9,8 Ko
    Voici également mon fichier .htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ index.php [QSA,L]
    Avec mon Controlleur HomeController.php, je parviens bien à afficher ma vue HomeView.php
    Donc quand j'essaye d’accéder à http://test/home/ j'ai le résultat souhaité.
    En revanche si je tape http://test/home/coucou , la page HomeView n'est plus chargée hors je souhaite garder la suite de l'url comme paramètres éventuels.
    je ne sais pas si mon problème viens de ma redirection d'URL qui serait trop stricte ou s'il vient d'une fonction que je ne maitrise pas bien dans ma classe Application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func_array([$this->controller, $this->action],$this->params);
    Voici ma classe Controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Controller
    {
        protected $view;
        public function view($name,$dir,$params=[]) {
            $this->view = new View($name,$dir,$params);
            return $this->view;
        }
    }
    puis ma classe HomeController
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class HomeController extends \Controller
    {
        public function HomeView() {
            $this->view('HomeView','home');
            $this->view->render();
        }
    }
    Ma classe view
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class View
    {
        protected $viewFile;
        protected $viewParams=[];
        protected $viewDir;
     
        public function __construct($view_file,$viewDir,$view_data)
        {
            $this->viewFile=$view_file;
            $this->viewParams=$view_data;
            $this->viewDir = $viewDir;
        }
        public function render(){
            if (file_exists(VIEWS.$this->viewDir.DIRECTORY_SEPARATOR.$this->viewFile.'.php')) {
               include VIEWS.$this->viewDir.DIRECTORY_SEPARATOR.$this->viewFile.'.php';
            }
        }
    }
    Ma classe application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    class Application
    {
        private $controller= 'Home\HomeController';
        private $url="Home";
        private $action="HomeView";
        private $file = CONTROLLERS.DIRECTORY_SEPARATOR.'Home'.DIRECTORY_SEPARATOR.'HomeController.php';
        private $params=[];
        public function __construct()
        {
            $this->getURL();
            if (file_exists($this->file)){
               $this->controller=new $this->controller;
                if (method_exists($this->controller,$this->url.'View')){
                    call_user_func_array([$this->controller, $this->action],$this->params);
                } else {
                    echo "<p>La méthode n'existe pas</p>";
                }
            }
        }
        protected function getURL(){
            $url = trim($_SERVER['REQUEST_URI'],'/');
            if(!empty($url)) {
                $params = explode('/',$url);
                $this->url=ucfirst(strtolower($params[0]));
                $this->controller = $url.DIRECTORY_SEPARATOR.ucfirst(strtolower($params[0]))."Controller";
                $this->file=CONTROLLERS.$this->controller.'.php';
                $this->action = $this->url.'View';
                unset($params[0]);
                $this->params=$params;
            }
        }
    }
    Et mon routeur (index.php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    define('ROOT', dirname(__DIR__).DIRECTORY_SEPARATOR.'test'.DIRECTORY_SEPARATOR);
    define('VIEWS',ROOT.'views'.DIRECTORY_SEPARATOR);
    define('MODELS',ROOT.'models'.DIRECTORY_SEPARATOR);
    define('CONTROLLERS',ROOT.'controllers'.DIRECTORY_SEPARATOR);
    define('PUBLICS',ROOT.'public'.DIRECTORY_SEPARATOR);
    define('CORE',ROOT.'core'.DIRECTORY_SEPARATOR);
    $modules = [ROOT, VIEWS, MODELS, CONTROLLERS, PUBLICS, CORE];
    set_include_path(get_include_path().PATH_SEPARATOR.implode(PATH_SEPARATOR,$modules));
    spl_autoload_register('spl_autoload', false);
    ob_start();
    //Appel du Controller principal
    new Application();
    $content = ob_get_clean();
    ?>
    <?php
    include PUBLICS.'template.php';
    ?>
    Auriez vous la gentillesse de bien vouloir m'aider SVP ?
    En espérant avoir été assez précis, je vous remercie par avance de votre aide.

    Bonne journée

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    c'est étrange que ton contrôleur possède une méthode view.
    Un contrôleur est censé ne renvoyer qu'une réponse (au sens générique du terme).

    Si c'est toi qui a conçu le MVC, je t'invite à lire mes deux articles de blog fraîchement rédigés :
    https://www.developpez.net/forums/bl...etour-theorie/
    et
    https://www.developpez.net/forums/bl...-cas-pratique/

    Il manque la notion de route dans ton MVC.
    Je pense que ta classe Application ne devrait s'occuper que la gestion de l'environnement d'exécution et rien d'autre.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/10/2014, 15h36
  2. [Débutant] récupérer des parametres de l'appli web depuis une classe
    Par paquerette dans le forum ASP.NET
    Réponses: 1
    Dernier message: 04/06/2014, 16h53
  3. Est-il possible de récupérer des parametres d'une librairies JS ?
    Par raton_laveur dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/09/2008, 16h33
  4. Comment passer et récupérer des parametres ?
    Par olibara dans le forum C#
    Réponses: 15
    Dernier message: 01/04/2008, 15h07
  5. [Spring MVC] Récupérer des valeurs de formulaires sur n pages
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2006, 07h23

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