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 :

Passage paramètre avec routeur/controlleur


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut Passage paramètre avec routeur/controlleur
    Bonjour,
    j'ai essayé de suivre l'excellent tutoriel nord coder

    j'y suis plus ou moins parvenu mais mon routeur ne fonctionne pas comme il devrait.
    Visiblement l'appel de la méthode showId quand je veux passer un id en paramètre n’aboutis pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $router->get('/article/:id','controllers\ArticlesController@showId');
    Quelqu'un pourrait il m'aider SVP ? Merci

    Voici mon index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    require "../vendor/autoload.php";
    $router = New router\Router($_SERVER["REQUEST_URI"]);
    $router->get('/articles','controllers\ArticlesController@showAll');
    $router->get('/article/:id','controllers\ArticlesController@showId');
    $router->get('/','controllers\AccueilController@show');
    $router->run();
    Ma classe routeur:
    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
    <?php
     
    namespace router;
     
    class Router
    {
        private $url;
        private $routes = [];
        public function __construct($request_uri)
        {
            $this->url = trim($request_uri,'/');
        }
        public function get(string $path, string $action):void
        {
            $this->routes['GET'][]= New Route($path,$action );
        }
        public function run()
        {
          foreach ($this->routes[$_SERVER['REQUEST_METHOD']] as $route)
          {
              if($route->matches($this->url))
              {
                  $route->execute();
              }
          }
     
          //return header('HTTP/1.0 404 Not Found');
        }
     
    }
    Ma classe route
    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
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
     
    namespace router;
     
     
    class Route
    {
        private $path;
        private $action;
        private $matches;
     
        /**
         * @param $path
         * @param $action
         */
        public function __construct(string $path, string $action)
        {
            $this->path = trim($path,'/');
            $this->action = $action;
        }
        public function matches(string $url)
        {
            $path=preg_replace('#:([0-9]+)#','([^/])',$this->path);
            $pathToMatch="#^$path$#";
            if(preg_match($pathToMatch,$url,$matches))
            {
                $this->matches=$matches;
                return true;
            } else {
                return false;
            }
        }
        public function execute()
        {
            $params = explode('@',$this->action);
            $controller= new $params[0]();
            $method = $params[1];
            return isset($this->matches[1])?$controller->$method($this->matches[1]):$controller->$method();
        }
    }
    et enfin mon contrôleur:
    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
    <?php
     
    namespace controllers;
     
    class ArticlesController
    {
        public function showAll(): void
        {
            ob_start();
            echo "j'affiche tous les articles";
            $content=ob_get_clean();
            require "../views/layout.php";
        }
        public function showId($id): void
        {
            ob_start();
            echo "j'affiche l'article N° $id";
            $content=ob_get_clean();
            require "../views/layout.php";
        }
    }

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 671
    Par défaut
    quel est le résultat quand vous allez à l'url "article/123" ?

    faites du débugage pour voir à quel endroit du code est le souci.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    Merci a toi de te pencher sur mon problème.
    C'est ce que j'ai fait mais je ne trouve pas

    Quand je vais à /articles j'ai bien mon message qui me dis que je sur la page de tous mes articles et mon template load bien.
    Quand je vais en revanche /article/123 pas de template pas de page article. Ps d'erreur non plus mais page blanche

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 671
    Par défaut
    dans la classe Route, la ligne 23 de votre message ne correspond pas au code indiqué dans la vidéo.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    non car je ne souhaite pas avoir de caractère alphanumérique mais uniquement numérique
    j'ai adapté à ma situation

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 671
    Par défaut
    vous avez modifiez la partie qui cherche le texte ":id". affichez l'expression régulière et vous verrez qu'elle n'est pas correcte.

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

Discussions similaires

  1. Probleme avec routeur en cascade
    Par FredericB dans le forum Hardware
    Réponses: 5
    Dernier message: 22/03/2013, 19h59
  2. [ZF 1.9] probleme de routeur avec utilisation des modules
    Par SergeF dans le forum MVC
    Réponses: 7
    Dernier message: 01/02/2010, 16h06
  3. probleme du routeur wi-fi
    Par issam47 dans le forum Hardware
    Réponses: 1
    Dernier message: 09/11/2007, 08h03
  4. Probleme de routeur et/ou de virus
    Par mael94420 dans le forum Administration
    Réponses: 5
    Dernier message: 11/12/2006, 08h56
  5. probleme modem routeur wifi linksys wag54g et free
    Par zegota dans le forum Hardware
    Réponses: 6
    Dernier message: 03/10/2005, 09h53

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