Architecture MVC, URL rewriting et dossiers virtuels

Consultez la formation au REFERENCEMENT naturel Google de WebRankInfo / Ranking Metrics

RiderFx3
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 11
Enregistré le: 31 Mai 2016

Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 9:23

Bonjour à tous,

Je suis nouveau ici, merci pour votre accueil.

Je suis entrain de développer un backoffice pour un CMS maison pour finaliser mon projet de fin d'année et valider mon titre.

Il est développé en PHP selon l'architecture MVC, et donc je n'ai qu'une seule page : index.php, tout le reste se passe dans les contrôleurs en fonction des GET passés dans l'URL.

Tout fonctionne très bien, mais j'aimerai rendre les URL plus lisibles en créant des dossiers virtuels, et en cachant le nom des get. Je me servirai aussi de l'URL rewriting pour le front-end, afin d'améliorer le référencement des articles par exemple.

Donc dans mon cas, admettons que je veuille afficher la page :
Code: Tout sélectionner
http://localhost/PHP/STAGE/index.php?c=User&a=edit&u_id=1


et que je veuille qu'elle apparaisse comme ça :
Code: Tout sélectionner
http://localhost/STAGE/user/edit/1


Devrais-je écrire ? :
Code: Tout sélectionner
RewriteRule ^user/edit/([0-9]+)/?$ /index.php?c=User&a=edit&u_id=$1 [L]


ça ne fonctionne pas, et me recharge la page localhost de XAMPP.
L'URL rewriting est activé et fonctionne avec les exemple simples des tutos.

Merci pour votre aide.

Romain.


spout
WRInaute accro
WRInaute accro
 
Messages: 8398
Enregistré le: 14 Mai 2003

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 10:51

Tu t'es vraiment cassé la tête pour rien:
http://forum.webrankinfo.com/pratique-htaccess-lire-avant-poser-t13288 ... l#p1217718

index.php/User/edit/1 est bcp plus facilement rewrité:
Code: Tout sélectionner
<?php
list(, $controller, $action, $id) = explode('/', $_SERVER['PATH_INFO']);
 
C'est comme ça que font les principaux CMS.

Encore mieux:
http://upshots.org/php/php-regexrouter
https://gist.github.com/dave1010/1214164

RiderFx3
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 11
Enregistré le: 31 Mai 2016

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 13:29

Merci pour ta réponse rapide.

Je ne comprends pas tout. Ou dois-je mettre la fonction explode du PATH_INFO ?

j'ai un autoroutage dans mon index pour les controlleurs et les actions de chaque contrôleur.

si je met ce code dans mon htaccess :
Code: Tout sélectionner
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php/$1 [L,QSA]


ça ne me charge pas la bonne page, uniquement l'index du backoffice, et sans charger le CSS, malgré le fait que j'ai ajouté la ligne : <base href="http://localhost/PHP/STAGE/index.php" /> dans le head de l'index. (Je pense que je dois aussi changer le chemin des fichiers CSS et JS du coup). Le plus gros du problème étant que ça me charge pas la page demandée.

Comment fonction l'explode du PATH_INFO exactement ? J'ai du mal à m'imaginer le cheminement.

Merci encore.


spout
WRInaute accro
WRInaute accro
 
Messages: 8398
Enregistré le: 14 Mai 2003

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 14:03

Fait un test:
index.php/foo/bar/baz

Code: Tout sélectionner
<?php
print_r
($_SERVER['PATH_INFO']); 

RiderFx3
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 11
Enregistré le: 31 Mai 2016

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 14:50

OK ça me renvoie : /foo/bar/baz
Donc si je l'explode ça me les sépare.

Mais je comprends pas comment ça reconstruit la bonne URL en fait ?
Ou alors j'ai pas besoin de reconstruire l'URL et c'est directement ça que je fais passer dans mon autorouteur ?


spout
WRInaute accro
WRInaute accro
 
Messages: 8398
Enregistré le: 14 Mai 2003

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 15:17

Voilà exactement, ensuite le rewrite est bcp plus simple que les paramètres en $_GET.

RiderFx3
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 11
Enregistré le: 31 Mai 2016

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 15:23

OK j'y vois un peu moins flou,

Le fait est que pour le contrôleur est les actions, ça sera assez simple de modifier mon autorouteur, par contre pour mes GET, ils ne sont pas toujours identiques, voir pas dans le même ordre, de plus, ça m'oblige du coup à recoder toutes mes methodes du contrôleur exploitant les GET ?

Exemple pour les users, mes get pour l'id sont "u_id" alors que pour les articles ce sont des "a_id"

Alors soit je comprends pas vraiment la totalité de la solution, soit ça va me prendre des jours de tout recoder.

Autre question, si mon index.php explode l'URL pour rediriger vers l'autorouteur, à quoi me sert htaccess ?

Merci encore.


spout
WRInaute accro
WRInaute accro
 
Messages: 8398
Enregistré le: 14 Mai 2003

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 17:50

OK à toi de voir :)

Avec PATH_INFO, le .htaccess servirait à rewriter: -http://example.com/index.php/controller/action/params en -http://example.com/controller/action/params avec 1 seule règle de rewrite.

RiderFx3
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 11
Enregistré le: 31 Mai 2016

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 18:32

Oui effectivement j'aimerai supprimer le index.php :)

Et donc ce que j'arrive pas encore à imaginer, c'est comme différencier les types de get qui peuvent passer dans l'URL.

Exemple si dans l'URL j'ai deux identifiants différents exemple u_id et a_id (c'est un exemple) comment je différencie lequel est lequel ?

Puisque ça donnerai article/edit/1/34


spout
WRInaute accro
WRInaute accro
 
Messages: 8398
Enregistré le: 14 Mai 2003

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Mar Mai 31, 2016 18:46

Cfr. les 2 liens que je t'ai passé dans la 1° réponse, ça permet de "mapper" différents paramètres.
Un 3° pour la route: http://altorouter.com/

MVC c'est aussi un router/dispatcher :)

RiderFx3
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 11
Enregistré le: 31 Mai 2016

Re: Architecture MVC, URL rewriting et dossiers virtuels

Message le Jeu Juin 02, 2016 8:36

Salut,

Je reviens vous dire que pour moi c'était trop compliqué de mettre en place ces solutions étant donné que tout mon MVC est déjà codé. Finalement en quelques lignes de htaccess je suis arrivé au résultat voulu et c'est bien plus simple à comprendre pour moi. (je me suis fait aider parce que je suis vraiment mauvais en preg_match).

L'avantage aussi c'est que les URL non réécrites fonctionnent toujours.

Code: Tout sélectionner
RewriteRule ^articles/catdelete/(\w+)$ index.php?c=Articles&a=catdelete&c_id=$1 [L]
RewriteRule ^articles/catedit/(\w+)$ index.php?c=Articles&a=catedit&c_id=$1 [L]

RewriteRule ^articles/tagdelete/(\w+)$ index.php?c=Articles&a=tagdelete&t_id=$1 [L]
RewriteRule ^articles/tagedit/(\w+)$ index.php?c=Articles&a=tagedit&t_id=$1 [L]

RewriteRule ^articles/(\w+)/(\w+)$ index.php?c=Articles&a=$1&a_id=$2 [L]

RewriteRule ^user/(\w+)/(\w+)$ index.php?c=User&a=$1&u_id=$2 [L]

RewriteRule ^(\w+)/(\w+)$ index.php?c=$1&a=$2 [L]


Merci encore pour l'aide.


Formation recommandée sur ce thème :

Formation REFERENCEMENT naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :