Routage d'URL d'application PHP
Donc je suis en train d'écrire un cadre sur lequel je veux de la base de quelques applications que je suis en train de travailler sur (le cadre est là, alors j'ai un environnement de travail, et un système qui me permettra, par exemple, l'utilisation d'une connexion unique)
Je veux faire de ce cadre, et les applications qu'il a utiliser une Ressource Architecture Orientée.
Maintenant, je veux créer un routage d'URL classe qui est extensible par APPLICATION des écrivains (et, éventuellement, par la CMS utilisateurs de l'Application, mais c'est WAYYYY à venir dans le futur) et je suis à essayer de comprendre la meilleure façon de le faire en regardant comment les autres apps de le faire.
source d'informationauteur Mez
Vous devez vous connecter pour publier un commentaire.
Je préfère utiliser reg ex plus de faire mon propre format, car il est de connaissance commune. J'ai écrit une petite classe que j'utilise ce qui me permet d'imbriquer ces reg ex tables de routage. Je utiliser pour utiliser quelque chose de similaire qui a été mis en œuvre par héritage, mais il n'a pas besoin d'héritage, donc je l'ai réécrit.
Je fais un reg ex sur une clé et une carte pour mon propre chaîne de contrôle. Prenez l'exemple ci-dessous. Je visite
/api/related/joe
et mon routeur classe crée un nouvel objetApiController
et les appels de méthoderelatedDocuments(array('tags' => 'joe'));
Afin de garder les erreurs de bas et de simplicité, vous pouvez diviser votre table. De cette façon, vous pouvez mettre la table de routage dans la classe qu'il contrôle. En prenant l'exemple ci-dessus, vous pouvez combiner les trois appels de fil en une seule.
Puis vous définissez ThreadController::route pour être comme cela.
Aussi, vous pouvez définir quelles que soient les valeurs par défaut que vous voulez pour votre chaîne de routage sur la droite. Il suffit de ne pas oublier de document ou vous embrouiller les gens. Je suis actuellement en appel d'index si vous n'incluez pas le nom de la fonction sur la droite. Ici est mon code actuel. Vous pouvez le changer pour gérer les erreurs de la façon dont vous le souhaitez et ou les actions par défaut.
Encore un autre cadre? - de toute façon...
Le truc, c'est avec le routage est de passer dans tous les coins de votre contrôleur de routage.
Vous voudrez probablement utiliser quelque chose de similaire à ce que j'ai indiqué ici:
http://www.hm2k.com/posts/friendly-urls
La deuxième solution vous permet d'utiliser des Url similaire à Zend Framework.
Utiliser une liste de Regexs pour correspondre à l'objet sur lequel je devrais être à l'aide de
Par exemple
Avantages: simple et sympathique, me permet de définir des routes directement
Contre: à commander, ne pas le rendre facile pour ajouter de nouvelles choses en (très enclins à faire des erreurs)
C'est, autant que je sache, comment Django ne
Je pense que beaucoup de cadres de l'utilisation d'une combinaison de Apache mod_rewrite et un contrôleur frontal. Avec mod_rewrite, vous pouvez transformer une URL comme ceci: /les gens/obtenir/3 dans ce:
index.le php?controller=personnes&method=get&id=3. Index.php serait la mise en œuvre de votre contrôleur frontal qui achemine la demande de page en fonction des paramètres donnés.
Comme vous vous en doutez, il y a beaucoup de façons de le faire.
Par exemple, dans Slim Cadre , un exemple de moteur de routage peut être le suivant (basé sur le modèle
${OBJECT}->${REQUEST METHOD}(${PATTERM}, ${CALLBACK})
):Donc, la initialisée instance (
$app
) est une méthode par méthode de requête (par exemple, get, post, put, delete, etc.) et la pénètre d'un parcours que le premier paramètre et le rappel que la seconde.L'itinéraire pouvez obtenir des jetons - ce qui est "variable" qui va changer lors de l'exécution basés sur les données telles que le nom, l'id de l'article, l'organisation, le nom de l'endroit ou ce que vous savez, comme dans n'importe quel contrôleur de routage).
Personnellement, je n'aime pas de cette façon mais je ne pense pas qu'il sera suffisamment flexible pour une avancée cadre.
Depuis que je suis en train de travailler actuellement avec ZF et Yii, je ne avons un exemple d'un routeur, j'ai créé un cadre pour une entreprise, je travaille pour:
La route du moteur est basé sur les regex (similaire à @gradbot), mais a eu une conversation dans les deux sens, donc si un de vos clients ne peuvent pas exécuter de mod_rewrite (Apache) ou d'ajouter des règles de réécriture sur son serveur, il ou elle peut toujours utiliser le traditionnel Url avec la chaîne de requête.
Le fichier contient un tableau, chacun, chaque élément est similaire à cet exemple:
Vous pouvez également utiliser des combinaisons plus complexes, tels que:
La ligne de fond, comme je le pense, c'est que les possibilités sont infinies, c'est juste dépendre de la façon dont complexes, vous souhaitez que votre cadre et de ce que vous voulez faire avec elle.
Si c'est, par exemple, uniquement destiné à être un service web ou un site web simple wrapper - il suffit d'aller avec Slim cadre du style de l'écriture - très facile et de bonne à la recherche de code.
Cependant, si vous souhaitez développer des sites complexes de l'utiliser, je pense que la regex est la solution.
Bonne chance! 🙂
Vous devriez vérifier Pux https://github.com/c9s/Pux
Voici le synopsis
De Zend framework MVC, par défaut, utilise une structure comme
où
router
est le routeur de fichier (mappé parmod_rewrite
controller
est à partir d'un contrôleur de l'action du gestionnaire qui est défini par une classe qui dérive deZend_Controller_Action
etaction
fait référence à une méthode du contrôleur, nomméactionAction
. Les paires clé/valeur peut aller dans n'importe quel ordre et sont disponibles à la méthode d'action, comme un tableau associatif.J'ai utilisé quelque chose de semblable dans le passé dans mon propre code, et jusqu'à présent, il a assez bien fonctionné.
Essayez de prendre regardez MVC modèle.
Zend Framework utilise par exemple, mais aussi CakePHP, CodeIgniter, ...
Moi personnellement n'aime pas le modèle MVC, mais c'est la plupart du temps mis en œuvre comme "la Vue pour le web".
La décision assez beaucoup dépend de la préférence...