J'essaye de créer un script de routage d'url pour mon nouveau CMS mais je dois avouer que regex n'est pas mon côté fort. Jusqu'à présent, je continue à courir dans les erreurs ou aucun résultat.Url routing regex help
Ce que je suis en train d'accomplir est d'utiliser certaines balises comme :id
:year
:slug
etc ...
Quelqu'un peut-il me aider ou me guider vers la bonne direction avec ce qui est de savoir comment utiliser preg_match ou similaire fonctions pour trouver le bon "modèle d'URL"? Google n'a pas été fait, il travail pour une fois: S
AJOUTÉE
Exemple url http://www.mysite.com/post/2011/08/15/title-of-a-blogg-post/
Si j'ai une base de données de route et un modèle est par exemple post/:year/:month/:day/:slug
je veux qu'il corresponde à ce modèle et appeler un certain contrôleur, action et dans cet exemple un certain article.
Le tableau regex i créé ressemble
$patterns = array(
":id" => "/^[0-9]*$/",
":year" => "/^([0-9]{4})*$/",
":year_short" => "/^([0-9]{2})*$/",
":month" => "/^([0-9]{2})*$/",
":day" => "/^([0-9]{2})*$/",
":slug" => "/^[a-zA-Z0-9 -]*$"
);
i Je pense dois remplacer :id
-/^[0-9]*$/
et courir après un preg_match pour trouver si le modèle d'URL existe dans ma table de routes. Cependant, je ne sais pas si j'utilise les bons motifs regex ou si je suis complètement perdu.
Mon fichier est .htaccess
(parce que je dois utiliser $ _GET ainsi)
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
J'utilise ce principe pour aller chercher l'URL et laisser de _GET variables $.
$route_orginal = trim($_SERVER["REQUEST_URI"]);
if(strpos($route_orginal, "?")!=FALSE) {
list($route_orginal, $get_orginal) = explode("?", trim($_SERVER["REQUEST_URI"]));
}
if(substr($route_orginal,(strlen($route_orginal)-1),strlen($route_orginal)) == "/") {
$this->routes = substr($route_orginal,1,(strlen($route_orginal)-2));
} else {
$this->routes = substr($route_orginal,1,strlen($route_orginal));
}
Le manuel explique les modèles regex http://www.php.net/manual/fr/reference.pcre.pattern.syntax.php, et http://regular-expressions.info/ est une introduction utile. Aussi des outils comme http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world peuvent aider à les fabriquer. – mario
Pouvez-vous s'il vous plaît ajouter plus de détails à votre question, Quelle est la contribution, votre code et une explication de ce qui ne fonctionne pas et ce que vous attendez exactement comme résultat. – stema
Espérons que le code que j'ai ajouté explique un peu mieux ce que j'essaie d'accomplir – dansige