Précédent   Forum des professionnels en informatique > PHP > Langage > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc. pour PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/01/2012, 15h41   #1
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Par défaut Router pour pattern MVC

Je vous propose aujourd'hui une classe permettant de mettre en place très simplement le pattern MVC.
Cette classe est un router chargée de rediriger les requêtes reçues vers le bon controller et la bonne action.
Les parties vue et modèles ne sont ici pas abordée, afin que chacun puissent faire comme il l'entend. Le but est de proposer une solution très simple pour débuter.

Les fonctionnalités du router :

Utilisation

Quelque soit l'utilisation vous devrez avoir un htacces qui redirige toutes les requêtes via votre index.php :
Code :
1
2
3
 
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|JPG|png|css)$ index.php
Format d'un controller

Afin d'utiliser le router, il faut respecter quelques règles pour les controller :

nom : le nom doit être de la forme : nomController , par exemple : indexController ou encore errorController
Paramètre : le constructeur du controller reçoit deux paramètres du routeur : la liste des paramètres passé par l'url et optionnellement le code langue
methode : Un controller doit impérativement avoir une méthode index();

Utilisation basique :

Code :
1
2
3
4
5
6
7
 
require 'Router.class.php';
 
$router = Router::getInstance();
//Définition du dossier contenant les controlleur
$router->setPath('controller/');
$router->load();
Ajout de controller et d'action de base

Code :
1
2
3
4
5
6
7
8
9
10
11
 
require 'Router.class.php';
 
$router = Router::getInstance();
//Définition du dossier contenant les controlleur
$router->setPath('controller/');
// Si aucun controller n'est spécifié on appèlera accueilController et sa méthode index()
$router->setDefaultController('accueil','index');
// En cas d'url invalid on appèlera le controller errorController et sa méthode alert()
$router->setErrorControllerAction('error', 'alert'); 
$router->load();
Définir une règle de routage

Code :
1
2
3
4
5
6
7
8
9
10
 
require 'Router.class.php';
 
$router = Router::getInstance();
//Définition du dossier contenant les controlleur
$router->setPath('controller/');
// L'url http://monsite.com/actualites/archives/2012/01/PHP sera redirigé vers
// actualitesController et sa méthode index(). Les paramètres annee, mois , catégorie seront passer au controller par le routeur.
$router->addRule('actualites/archives/:annee/:mois/:categorie', array('controller' => 'actualites', 'action' => 'index'));
$router->load();
Je laisse volontairement de coté la partie multilangue pour le moment que je n'ai pas assez testé. Si elle vous intéresse il suffira de jeter un oeil au code , son utilisation est documentée.

Je suis preneur de toutes les critiques que vous pourrez faire
Fichiers attachés
Type de fichier : php Router.class.php (10,1 Ko, 24 affichages)
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 17h40   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Il faut que je regarde en détail mais à vue de nez il n'est pas très différent du mien (sauf peut être pour les règles de routage qui son un poil plus élaborées).
Pour ceux que ça intéresse c'est par ici: https://github.com/bdelespierre/php-...uter.class.php

Sinon tu peux remplacer ta règle de réécriture par:
Code :
1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !favicon.ico$
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
ça t'évite de devoir spécifier toutes les extensions du monde à la main
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h59.


 
 
 
 
Partenaires

Hébergement Web