Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appel dynamique de class ?

Sujet résolu
    16 septembre 2020 à 14:31:58

    Bonjour, sur un (tout) petit site, j'utilise un routeur "fait main" pour servir des pages statiques.

    Voici le code source : 

    <?php
        switch($_SERVER['REQUEST_URI']) {
            case "/":
                // home page code
            break;
            case "/me":
                // me page code
            break;
            case "/contact":
                // contact page code
            break;
            case "/projets":
                // projet page code
            break;
            default:
                // err 404
        }
    ?>

    J'aimerais externalisé les codes sources dans des class PHP comme ceci par exemple (pour home) : 

    <?php namespace home;
        class controller {
            public function home() {
                $number = random_int(0, 100);
                return '<html><body>Lucky number: '.$number.'</body></html>';
            }
        }
    ?>

    Ce fichier ce situe dans le dossier "controller" du dossier parent (../controller/home.php).

    Comment je peut faire pour l'appeler depuis mon routeur ? 😅

    -
    Edité par devwwm 16 septembre 2020 à 14:33:46

    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2020 à 14:42:48

      $controller = new \home\controller();
      echo $controller->home();
      Pour te passer de faire ceci à la main,
      Il va falloir que ton routeur connaisse quel controlleur et quelle methode à appelé,
      lorsque qu'il rencontre certaine request_uri
      FonctionAssocieURIControllerMethod("/","\home\controller","home");
      C'est un exemple mais ça peut te donner une idée peut être
      echo FonctionResoudreURI($_SERVER["REQUEST_URI"]);

      -
      Edité par Infoxp 16 septembre 2020 à 14:47:52

      • Partager sur Facebook
      • Partager sur Twitter
      Infoxp ici depuis 2007
        16 septembre 2020 à 14:49:45

        Je te conseille de voir les 5 dernières vidéos de Lior car il parle de ce genre de cas ;)
        • Partager sur Facebook
        • Partager sur Twitter
          16 septembre 2020 à 15:11:26

          Infoxp, ça ne semble pas fonctionner voici l'architecture de mes fichiers : 

          Root
          +---controller
          |   \--- controller.php
          \---public
              \--- test.php

          Le code source de controller.php

          <?php namespace home;
              class controller {
                  public function home() {
                      return 'test';
                  }
              }
          ?>

           Le code source de test.php 

          <?php
              $controller = new \home\controller();
              echo $controller->home();
          ?>

          Et, ça ne fonctionne pas x) J'ai du mal comprendre / faire quelque chose >.<
          J'obtient une erreur 500 (c'est le new XXX qu'il aime pas :c ).

          Pour la seconde partie de ton message, je peut récupéré dynamiquement le namespace et le nom de la fonction à executer dans des variables ($nspace et $callback), est-ce que je peut faire quelques chose du genre $controller = new $nspace(); puis $controller->{$callback}(); ?

          christouphe je tombe sur un auteur-compositeur-interprète australien >.<
          C'est qui ?  où ? :c

          Merci pour votre aide aussi rapide !

          -
          Edité par devwwm 16 septembre 2020 à 15:12:40

          • Partager sur Facebook
          • Partager sur Twitter
            16 septembre 2020 à 15:26:58

            As tu inclus le fichier php qui defini la classe ? ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Infoxp ici depuis 2007
              16 septembre 2020 à 15:33:21

              Non, je doit l'inclure avec use ?
              • Partager sur Facebook
              • Partager sur Twitter
                16 septembre 2020 à 15:39:49

                Non,

                avec include

                • Partager sur Facebook
                • Partager sur Twitter
                Infoxp ici depuis 2007
                  16 septembre 2020 à 15:47:16

                  Ah ! Ça fonctionne mieux en effet x)
                  <?php
                      require '../controller/controller.php';
                      $controller = new \home\controller();
                      echo $controller->home();
                  ?>
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 septembre 2020 à 9:15:58

                    Top merci à tous les deux !!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Appel dynamique de class ?

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown