Comme vous pouvez vous y attendre, il y a beaucoup de façons de le faire.
Par exemple, dans Slim Framework, un exemple du moteur de routage peut être le folllowing (en fonction du modèle ${OBJECT}->${REQUEST METHOD}(${PATTERM}, ${CALLBACK})
):
$app->get("/Home", function() {
print('Welcome to the home page');
}
$app->get('/Profile/:memberName', function($memberName) {
print('I\'m viewing ' . $memberName . '\'s profile.');
}
$app->post('/ContactUs', function() {
print('This action will be fired only if a POST request will occure');
}
Ainsi, l'instance initialisés ($app
) obtient une méthode par méthode de requête (par exemple, obtenir, publier, mettre, supprimer, etc.) et obtient une route en tant que premier paramètre et le rappel en tant que deuxième. L'itinéraire peut obtenir des jetons - qui sont "variables" qui changeront à l'exécution sur la base de certaines données (comme le nom du membre, l'ID de l'article, le nom de l'organisation ou autre).
Personnellement, j'aime bien, mais je ne pense pas que ce soit assez flexible pour un framework avancé.
Depuis que je travaille actuellement avec ZF et Yû, j'ai un exemple d'un routeur j'ai créé dans le cadre d'un cadre d'une entreprise pour laquelle je travaille:
Le moteur d'itinéraire est basé sur regex (similaire à celui de @ gradbot) mais a une conversation bidirectionnelle, donc si un de vos clients ne peut pas exécuter mod_rewrite (dans Apache) ou ajouter des règles de réécriture sur son serveur, il peut toujours utiliser le traditionnel URL avec chaîne de requête.
Le fichier contient un tableau, chacun de celui-ci, chaque élément est similaire à cet exemple:
$_FURLTEMPLATES['login'] = array(
'i' => array(// Input - how the router parse an incomming path into query string params
'pattern' => '@Members/Login/[email protected]',
'matches' => array('Application' => 'Members', 'Module' => 'Login'),
),
'o' => array(// Output - how the router parse a query string into a route
'@Application=Members(&|&)Module=Login/[email protected]' => 'Members/Login/'
)
);
Vous pouvez également utiliser des combinaisons plus complexes, telles que:
$_FURLTEMPLATES['article'] = array(
'i' => array(
'pattern' => '@CMS/Articles/([\d]+)/[email protected]',
'matches' => array('Application' => "CMS",
'Module' => 'Articles',
'Sector' => 'showArticle',
'ArticleID' => '$1'),
),
'o' => array(
'@Application=CMS(&|&)Module=Articles(&|&)Sector=showArticle(&|&)ArticleID=([\d]+)@' => 'CMS/Articles/$4'
)
);
La ligne de fond , comme je le pense, c'est que les possibilités sont infinies, cela dépend seulement de la complexité de votre cadre et de ce que vous voulez en faire. Par exemple, il s'agit simplement d'un service Web ou d'un simple wrapper de site Web - il suffit de suivre le style d'écriture de Slim framework - un code très simple et très esthétique. Cependant, si vous souhaitez développer des sites complexes en l'utilisant, je pense que regex est la solution.
Bonne chance! :)
Le deuxième exemple est très bien ce que je pensais réellement faire ... (style RoR) - Je vais jeter un oeil à travers votre code. – Mez
C'est très similaire à Django Python. – kta