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 :

L'action n'existe pas [POO]


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut L'action n'existe pas
    Bonsoir,

    rawsrc a conçu un autoloader et un système de routage basique. Mon souci est que quand j'essaie de l'utiliser, il ne reconnait pas l'action demandée.

    index.php :
    Code php : 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
    41
    42
    43
    <?php
    define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
     
    include DIR_ROOT.DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php";//definition of the constants
     
    $autoloader = function($full_class_name) {
        // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
        $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
        // on construit le chemin complet du fichier à inclure :a
        // il faut que l'autoloader soit toujours à la racine du site
        $path = DIR_ROOT.$name.'.php';
     
        // on vérfie que le fichier existe et on l'inclut
        // sinon on passe la main à une autre autoloader (return false)
        if (is_file($path)) {
            include $path;
            return true;
        } else {
            return false;
        }
    };
     
    spl_autoload_register($autoloader);
     
    //// modèle d'url : http://localhost/phpecho-billet2/?action=liste_billets
    //// modèle d'url : http://localhost/phpecho-billet2/?action=achat_billets
     
    $actions = [
    	'liste_billets' => ['class' => 'model\Billet', 'fonction' => 'Read_All_Billets'],
    	'achat_billet'  => ['class' => 'model\Billet', 'fonction' => 'AchatBillet'],
    ];
     
    // NE PAS TOUCHER => SYSTEME DE ROUTAGE BASIQUE
    use vendor\rawsrc\Request;
    $request = new Request($_SERVER['REQUEST_URI']);var_dump($request->query());
    $action  = $request->query()['action'];
    if (isset($actions[$action])) {
    	['class' => $class_name, 'fonction' => $method] = $actions[$action];
    }
    $class = new $class_name;
    $class->$method();
     
    // FIN DU ROUTAGE BASIQUE

    vendor\rawsrc\Request.php :
    Code php : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    <?php
     
    declare(strict_types=1);
     
    namespace vendor\rawsrc;
     
    /**
     * TUTORIAL DVP SUR LE CONCEPT MVC : MODÈLE-VUE-CONTRÔLEUR
     * @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7786/developpement-selon-l-approche-mvc-modele-vue-controleur-retour-theorie/
     * @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7804/developpement-selon-lapproche-mvc-modele-vue-controleur-cas-pratique/
     *
     * Classe en charge de la gestion d'une requête générique
     * Anlalyse complète de l'URL
     */
    class Request
    {
        // composants d'une URL
        /**
         * @var string
         */
        private $scheme = '';
        /**
         * @var string
         */
        private $user = '';
        /**
         * @var string
         */
        private $pwd = '';
        /**
         * @var string
         */
        private $host = '';
        /**
         * @var string
         */
        private $port = '';
        /**
         * @var array
         */
        private $path = [];
        /**
         * @var array
         */
        private $query = [];
        /**
         * @var string
         */
        private $fragment = '';
        /**
         * @var bool
         */
        private $is_ajax = false;
        /**
         * @var bool
         */
        private $is_valid = false;
     
        /**
         * @param string $url
         */
        public function __construct(string $url)
        {
            $this->parse($url);
        }
     
        /**
         * @return string
         */
        public function scheme(): string
        {
            return $this->scheme;
        }
     
        /**
         * @return string
         */
        public function user(): string
        {
            return $this->user;
        }
     
        /**
         * @return string
         */
        public function host(): string
        {
            return $this->host;
        }
     
        /**
         * @return array
         */
        public function path(): array
        {
            return $this->path;
        }
     
        /**
         * @return string
         */
        public function port(): string
        {
            return $this->port;
        }
     
        /**
         * @return array
         */
        public function query(): array
        {
            return $this->query;
        }
     
        /**
         * @return string
         */
        public function fragment(): string
        {
            return $this->fragment;
        }
     
        /**
         * @return bool
         */
        public function isAjax(): bool
        {
            return $this->is_ajax;
        }
     
        /**
         * @return bool
         */
        public function isValid(): bool
        {
            return $this->is_valid;
        }
     
        /**
         * PARSEUR d'url
         * Sépare l'URL en composants selon la norme RFC3986
         */
        private function parse(string $url)
        {
            // ici la fonction décompose l'url en composants
            // quand vous manipulez une instance de la classe Request
            // vous ne savez pas comment ce travail est fait => on va parler d'IMPLÉMENTATION
            // pour vous c'est transparent : vous utilisez simplement la classe qui ENCAPSULE cette implémentation
     
            $parts = parse_url($url);
     
            if ($parts === false) {
                return;
            }
     
            if (isset($parts['scheme'])) {
                $this->scheme = $parts['scheme'];
            }
     
            if (isset($parts['host'])) {
                $this->host = $parts['host'];
            }
     
            if (isset($parts['port'])) {
                $this->port = $parts['port'];
            }
     
            if (isset($parts['user'])) {
                $this->user = $parts['user'];
                $this->pwd  = $parts['pass'] ?? '';
            }
     
            if (isset($parts['path'])) {
                $this->path = explode('/', trim($parts['path'], '/'));
            }
     
            if (isset($parts['query'])) {
                parse_str($parts['query'], $this->query);
            }
     
            if (isset($parts['fragment'])) {
                $this->fragment = $parts['fragment'];
            }
     
            if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
                $this->is_ajax = (strtoupper($_SERVER['HTTP_X_REQUESTED_WITH']) === 'XMLHTTPREQUEST');
            }
     
            $this->is_valid = true;
        }
    }

    model\Billet.php :
    Code php : 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
    <?php
    namespace model;
     
    use classes\MYPDO\MYPDO;    //to use class MYPDO  
     
    class Billet
    {
          /* Constructor
          */
        public function __construct()
        {
        }
     
    	public function Read_Billet($Id){
    		$pdo=new MYPDO();   // creation of an object for DB (instantiation of MYPDO)
    		//extraire données de la bdd(titre, date, contenu)
    		$Req='select * from `billets` where id=:id';
    		$var=$pdo->select($Req,[':id'=>$Id]);
    		return($var);
    	}  
     
    	public function Read_All_Billets(){
     
    		$pdo=new MYPDO();   // creation of an object for DB (instantiation of MYPDO)
    		$ret=[];
    		$Req='select id from `billets`';
    		$var=$pdo->select($Req,[]);
    		foreach($var as $id) {$ret[]=$this->Read_Billet($id['id']);}
    		return($ret);
    	}
     
     
    } // end class Billet

    Notice: Undefined index: action in C:\wamp64\www\phpecho-billet2\index.php on line 36
    et le var_dump de la ligne 35 de index.php retourne NULL...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  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
    quelle est l'url testée ?
    allez je vais compléter mon code :
    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
    // NE PAS TOUCHER => SYSTEME DE ROUTAGE BASIQUE
    use vendor\rawsrc\Request;
    $request = new Request($_SERVER['REQUEST_URI']);
    $action  = $request->query()['action'] ?? '';
     
    if ($action === '') {
        $class_name = "nom de la classe en charge de la page d'accueil";
        $method     = "nom de la méthode de la classe en charge de la page d'accueil à exécuter pour afficher l'accueil";
    } elseif (isset($actions[$action])) {
    	['class' => $class_name, 'fonction' => $method] = $actions[$action];
    } else {
        $class_name = "nom de la classe en charge de erreurs";
        $method     = "nom de la méthode de la classe en charge des erreurs a exécuter pour afficher : 404 - Page non trouvée";
    }
    $class = new $class_name;
    $class->$method();
    Donc, il te reste à créer une classe Home qui va gérer la page d'accueil et une autre ServerError qui va gérer les erreurs : 404, 500...

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    j'ai démarré le codage, mais j'arrête en plein milieu car je me pose des questions : dans ton code, tu mets "nom de la classe" et "nom de la méthode", mais tu ne dis rien sur la localisation des classes. On les mets où l'on veut ?

    Pour créer une classe "Home", mon idée était d'utiliser PhpEcho, et donc de reprendre le code que j'avais fait marcher. Par contre, il n'y avait pas d'autoloader mais des include à la place. Est-ce que je peux reprendre le code tel quel, et les includes et l'autoloader vont-ils réussir à cohabiter ?

    Voici l'état de mon code :
    index.php
    .htaccess
       |--view
       |-----Layout.php
       |-----Home.php
       |--vendor
       |----PhpEcho
       |------PhpEcho.php
       |----rawsrc
       |------Request.php
       |--src
       |----Home.php
       |--model
       |----Billet.php
       |--config
       |----config.php
       |--classes
       |----MyPdo.php
    
    
    index.php
    Code php : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
     
    include DIR_ROOT.DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php";//definition of the constants
     
    $autoloader = function($full_class_name) {
        // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
        $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
        // on construit le chemin complet du fichier à inclure :a
        // il faut que l'autoloader soit toujours à la racine du site
        $path = DIR_ROOT.$name.'.php';
     
        // on vérfie que le fichier existe et on l'inclut
        // sinon on passe la main à une autre autoloader (return false)
        if (is_file($path)) {
            include $path;
            return true;
        } else {
            return false;
        }
    };
     
    spl_autoload_register($autoloader);
     
    //// modèle d'url : http://localhost/phpecho-billet2/?action=liste_billets
    //// modèle d'url : http://localhost/phpecho-billet2/?action=achat_billets
     
    $actions = [
    	'liste_billets' => ['class' => 'model\Billet', 'fonction' => 'Read_All_Billets'],
    	'achat_billet'  => ['class' => 'model\Billet', 'fonction' => 'AchatBillet'],
    ];
     
    /// NE PAS TOUCHER => SYSTEME DE ROUTAGE BASIQUE
    use vendor\rawsrc\Request;
    $request = new Request($_SERVER['REQUEST_URI']);
    $action  = $request->query()['action'] ?? '';
     
    if ($action === '') {
        $class_name = "Home";
        $method     = "Display_Home";
    } elseif (isset($actions[$action])) {
    	['class' => $class_name, 'fonction' => $method] = $actions[$action];
    } else {
        $class_name = "nom de la classe en charge de erreurs";
        $method     = "nom de la méthode de la classe en charge des erreurs a exécuter pour afficher : 404 - Page non trouvée";
    }
    $class = new $class_name;
    $class->$method();
     
    // FIN DU ROUTAGE BASIQUE
     
    // ici on va chercher notre classe de moteur de rendu
    include DIR_ROOT.'vendor'.DIRECTORY_SEPARATOR.'PhpEcho'.DIRECTORY_SEPARATOR.'PhpEcho.php';
     
    // démarrage de l'application : affichage d'un billet
    include DIR_ROOT.'src'.DIRECTORY_SEPARATOR.'Home.php';

    view/Home.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class Home {
      public function Display_Home() {
      ?>
    <h3><?= $this('titre') ?> le <em><?= $this('date_creation') ?></em></h3>
    <p>
      <?= nl2br($this('contenu')) ?><br>
      <em><a href="commentaires.php?billet=<?= rawurlencode($this['titre']) ?>">Commentaires</a></em>
    </p>
     
    <?php
    }
    }

    src/Home.php
    Code php : 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
    <?php
    // on charge notre Layout
    $page = new PhpEcho('view Layout.php');
     
     $pe = new PhpEcho('view Home.php');
     $pe['titre'] = 'abc';
     $pe['date_creation'] = '08/12/2019';
     $pe['contenu'] = 'contenu lambda';
     
     $page['body'] = $pe; 
    /** 
     * dans le layout, voici comment cette valeur est traitée : <?= $this['body'] ?>
     * l'instance est directement transformée en string avec echo
     * aucun problème car on sait que PhpEcho implémente la méthode magique __toString()
     * dans ce contexte la commande echo dans sa forme abrégée <?= recevra bien du texte
     */
     
    // on renvoie au navigateur la page assemblée
    echo $page;

    vendor/rawsrc/Request.php : cf le post #1
    model/Billet.php : cf le post #1
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    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
    tu ne t'inspires pas assez des exemples et des échanges précédents qu'on a eu, allez on reprend :
    C'est simple : tu dois toujours garder le même traitement informatique pour tout ce que tu codes, une fois que tu as pris une voie, tu la conserve et surtout tu ne t'en éloignes pas.
    Donc, ton code de vue est très éloigné de ce que je t'avais montré. Pourquoi tu m'as collé une classe Home dans ce fichier ? Je n'ai jamais procédé ainsi. PhpEcho est un moteur de rendu hyper simple : il n'attend que du code HTML.

    Tu créés un fichier rendu html : www/view/Home.php avec ce code :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h3><?= $this('titre') ?> le <em><?= $this('date_creation') ?></em></h3>
    <p>
      <?= nl2br($this('contenu')) ?><br>
      <em><a href="commentaires.php?billet=<?= rawurlencode($this['titre']) ?>">Commentaires</a></em>
    </p>
    Ensuite on va créer un fichier qui va appeler cette vue en lui passant les bons paramètres. Dans /model tu créés un fichier Home.php avec ce code :
    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 model;
     
    use vendor\PhpEcho\PhpEcho;
     
    class Home
    {
        public function accueil()
        {
            // ici on prépare le rendu de la vue qui se trouve dans le fichier www/view/Home.php
            // suivant le layout qui se trouve dans le fichier www/view/Layout.php
     
            // rendu du corps de la page
            $accueil = new PhpEcho([DIR_ROOT, 'view Home.php']);
            // données attendues par le fichier vue
            // tu peux extraire ces données d'une base de données, à toi de voir
            // du moment que les variables attendues par la page HTML sont bien définies
            $accueil['titre'] = 'ici un titre';
            $accueil['date_creation'] = '11/12/2019';
            $accueil['contenu'] = 'ici un contenu';
     
            // insertion du corps de la page dans le layout
            $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);
            $page['body'] = $accueil;
     
            // renvoi de la page au navigateur
            echo $page;
        }
    }
    et on peut maintenant paramétrer notre 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
    // NE PAS TOUCHER => SYSTEME DE ROUTAGE BASIQUE
    use vendor\rawsrc\Request;
    $request = new Request($_SERVER['REQUEST_URI']);
    $action  = $request->query()['action'] ?? '';
     
    if ($action === '') {
        $class_name = 'model\Home';   // ICI NOTRE AJOUT POUR LE TRAITEMENT DE LA PAGE D'ACCUEIL
        $method     = 'accueil';
    } elseif (isset($actions[$action])) {
    	['class' => $class_name, 'fonction' => $method] = $actions[$action];
    } else {
        $class_name = "nom de la classe en charge de erreurs";
        $method     = "nom de la méthode de la classe en charge des erreurs a exécuter pour afficher : 404 - Page non trouvée";
    }
    $class = new $class_name;
    $class->$method();
     
    // FIN DU ROUTAGE BASIQUE
    Tu n'as pas besoin de ton répertoire src, il en sert à rien.

    Je te laisse procéder EXACTEMENT de la même manière pour la gestion des pages d'erreur.
    Et je t'en prie à nouveau arrête avec les include et include_once, tu as une redirection vers ton index.php de toutes les requêtes avec chargement d'un autoloader, je te le répète : on ne se sert plus que de use.
    Pourquoi t'es allé me rajouter des include à la fin du fichier index.php ? Tu ne comprends pas mes explications ou quoi ? Je te fais des exemples qui fonctionnent et en plus je te le montre sur ton pc et toi tu me les flingues... C'est pas cool.

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    J'ai pas fini de pas être cool : page blanche et source de la page : vierge.

    url : http://localhost/phpecho-billet2/index.php.

    Mon arborescence
    index.php
    .htaccess
       |--view
       |-----Layout.php
       |-----Home.php
       |-----Error.php
       |--vendor
       |----PhpEcho
       |------PhpEcho.php
       |----rawsrc
       |------Request.php
       |--model
       |-----Billet.php
       |-----Home.php
       |-----Error.php
       |--config
       |-----config.php
       |--classes
       |-----MyPdo.php
    
    
    le code des fichiers nouveaux ou changés :
    index.php :
    Code php : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
    define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
     
    include DIR_ROOT.DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php";//definition of the constants
     
    $autoloader = function($full_class_name) {
        // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
        $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
        // on construit le chemin complet du fichier à inclure :a
        // il faut que l'autoloader soit toujours à la racine du site
        $path = DIR_ROOT.$name.'.php';
     
        // on vérfie que le fichier existe et on l'inclut
        // sinon on passe la main à une autre autoloader (return false)
        if (is_file($path)) {
            include $path;
            return true;
        } else {
            return false;
        }
    };
     
    spl_autoload_register($autoloader);
     
    //// modèle d'url : http://localhost/phpecho-billet2/?action=liste_billets
    //// modèle d'url : http://localhost/phpecho-billet2/?action=achat_billets
     
    $actions = [
    	'liste_billets' => ['class' => 'model\Billet', 'fonction' => 'Read_All_Billets'],
    	'achat_billet'  => ['class' => 'model\Billet', 'fonction' => 'AchatBillet'],
    ];
     
    // NE PAS TOUCHER => SYSTEME DE ROUTAGE BASIQUE
    use vendor\rawsrc\Request;
    $request = new Request($_SERVER['REQUEST_URI']);
    $action  = $request->query()['action'] ?? '';
     
    if ($action === '') {
        $class_name = 'model\Home';   // ICI NOTRE AJOUT POUR LE TRAITEMENT DE LA PAGE D'ACCUEIL
        $method     = 'accueil';
    } elseif (isset($actions[$action])) {
    	['class' => $class_name, 'fonction' => $method] = $actions[$action];
    } else {
        $class_name = 'model\Error';
        $method     = 'Display_Msg_Error';
    }
    $class = new $class_name;
    $class->$method();
     
    // FIN DU ROUTAGE BASIQUE

    model/Error.php :
    Code php : 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 model;
     
    use vendor\PhpEcho\PhpEcho;
     
    class Error
    {
        public function Display_Msg_Error()
        {
            // ici on prépare le rendu de la vue qui se trouve dans le fichier www/view/Home.php
            // suivant le layout qui se trouve dans le fichier www/view/Layout.php
     
            // rendu du corps de la page
            $error = new PhpEcho([DIR_ROOT, 'view Error']);
            // données attendues par le fichier vue
            // tu peux extraire ces données d'une base de données, à toi de voir
            // du moment que les variables attendues par la page HTML sont bien définies
     
            $error['contenu'] = 'unknown action';
     
            // insertion du corps de la page dans le layout
            $page = new PhpEcho([DIR_ROOT, 'view Layout']);
            $page['body'] = $error;
     
            // renvoi de la page au navigateur
            echo $page;
        }
    }

    model/Home.php : cf post précédent

    view/Error.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p>
      <?= nl2br($this('contenu')) ?><br>
    </p>

    view/Home.php :cf post précédent
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    rawsrc a trouvé pourquoi j'étais pas cool : mon copier-coller avait perdu en route l'extension des fichiers du répertoire model (lignes 15 et 24 de model/Home.php) !
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. [PB ODBC] Ce serveur n'existe pas ou son accès est refusé
    Par meufeu dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/12/2015, 18h02
  2. Le package javax.servlet.http. n'existe pas
    Par sophie1909 dans le forum JBuilder
    Réponses: 5
    Dernier message: 25/08/2009, 03h17
  3. Réponses: 1
    Dernier message: 27/01/2008, 17h19
  4. erreur : la table n'existe pas !!!
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/06/2005, 14h17
  5. Le membre de collection requis n'existe pas
    Par mschistozis dans le forum Access
    Réponses: 4
    Dernier message: 25/10/2004, 16h41

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