Bonjour,

je voudrai votre avis, voici mes routes ce que ça donne avec un routeur PHP j'ai suivis le tuto de grafikart.

$router->map('GET', '/home', 'home','accueil');
$router->map('GET', '/contact', 'contact','contact');
$router->map('GET', '/forum', 'forum','forum');
$router->map('GET', '/error', 'error','error');
$router->map('GET', '/post-[*:slug]-[i:id]', 'post','article');
$match = $router->match();

et une partie de mon htaccess

RewriteRule ^([a-zA-Z0-9\-]+)/?$ index.php?page=$1 [NC,L]

RewriteRule ^home/([a-zA-Z0-9\-]+)/?$ index.php?page=home&pager=$1 [NC,L]

#---------------------------------------------
# Partie post
#---------------------------------------------

#post
RewriteRule ^post/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ index.php?page=post&id=$1&slug=$2 [NC,L]

Quelle est la différence puisse que je récupère les même lien ? local/post/slug-id

oui le htaccess c'est chiant mais ça fait pareille puisse que je dois identifié les même route que dans le routeur j'arrive pas a comprendre pourquoi c'est mieux.

merci.

1 réponse


quenti77
Réponse acceptée

Hello,

Pourquoi il est mieux d'avoir un routeur en PHP que d'utiliser le HTAcces ?

Déjà car HTAccess sous-entends d'utiliser Apache pour le projet sauf que si je veux en Prod utiliser NGinx ou HAProxy et que pendant la phase de développement je veux lancer le serveur interne de PHP (avec php -S 127.0.0.1:8000 -t public), avec un fichier HTAccess je suis bloqué et m'oblige à installer Apache.

En pratique normalement, on est pas sensé avoir besoin de fichier HTAccess non plus. Le fichier HTAccess ne sert que lorsque l'on a pas accès à la configuration du serveur Apache. De base NGinx et HAProxy non pas de fichier HTAccess. En prod tu es sensé mettre le contenu du fichier HTAccess dans le fichier vhost de ton proxy. Si tu suis cette directive, cela veut dire que tu es obliger pour mettre en prod de update la configuration de ton proxy.

Si j'utilise le HTAccess et que je veux générer l'url de la page article (de ton exemple) je serait obliger d'écrire l'url à la main alors qu'avec le router de PHP je pourrai écrire quelque chose comme : $router->generate('article', ['slug' => 'mon-slug', 'id' => 123]);

Si le HTAccess était si bien, pourquoi les frameworks comme Symfony, Laravel, etc. ne demenderai pas d'éditer le fichier HTAccess directement plutôt que de passer par le routeur ?

En fait cette question d'écrire dans le fichier HTAccess ne se pose que dans le langage PHP, car avec un projet écrit sous Java ou NodeJS tu n'aurais pas le choix d'utiliser le routeur de l'application.

Comme PHP peut lancer n'importe quel fichier comme fichier de départ et sans avoir besoin de couper PHP et de le relancer, on peut donc utiliser un fichier HTAccess mais dans un projet NodeJS par exemple tu dois lancer l'application dans son ensemble et si tu veux update, tu dois couper et relancer l'application complète.

Si je prends l'exemple de NodeJS avec le code suivant (fait rapidement pour l'exemple) :

const http = require('http')

const home = function (request, response) {}
const post = function (request, response) {}
const addPost = function (request, response) {}

const requestListener = function (request, response) {
    if (request.method === 'GET') {
        switch (request.url) {
            case '/':
                return home(request, response)
            case '/blog':
                return post(request, response)
        }
    } else if (request.method === 'POST') {
        switch (request.url) {
            case '/blog':
                return addPost(request, response)
        }
    }
    response.end('404')
}

const server = http.createServer(requestListener)
server.lisen(8000, '127.0.0.1', () => { console.log('Server is running on http(s)://127.0.0.1:8000') })

J'ai écrit à la main mais il existe des routers comme pour PHP qui simplifie l'écriture du code mais l'idée est là

Si je lance le serveur node app.js j'aurai accès sur 127.0.0.1:8000 au serveur. Si je veux utiliser un proxy je vais juste dire : "Les requêtes du domaine domain.com vont vers 127.0.0.1:8000"

Si maintenant je veux ajouter une route ou même juste modifier le fichier, je vais devoir couper le process "node app.js" et le relancer. (Pour la prod il y a des outils qui permettent de le faire facilement et qui monitore le process)

La il n'y a plus de question à ce poser, ton fichier HTAccess il n'aurai aucune utilité car le seul truc qui ferait c'est dire telle route va sur 127.0.0.1:8000

En conclusion, si 99% des framework utilise quelque chose c'est qu'il y a surement une bonne raison (mais ça n'empêche pas de regarder et de comprendre pourquoi :) )

neecride
Auteur

Merci j'ai bien compris du coup je vais m'éfforcer a mieux géré mes routes avec un router