Comment définir la dynamique de la route à utiliser slug dans CodeIgniter?
Disons que j'ai un contrôleur nommé
pages
et il y a une méthode
slug_on_the_fly
public function slug_on_the_fly($slug)
Comment serait ma route pour ce look?
E. g. pour le blog de contrôleur, il serait facile:
$route['blog/(:any)'] = 'pages/slug_on_the_fly/$1';
et puis http://localhost/blog/name-of-the-article
œuvres de nice
Cependant, que faire si je veux le faire sans blog
si par exemple la
http://localhost/name-of-the-article
ou http://localhost/another-article-blablabla
Comment le faire et ne pas casser l'autre des routes par exemple $route['friends'] = 'users';
ou $route['about-us'] = 'pages/about_us';
?
Parce que si je fais:
$route['(:any)'] = 'pages/slug_on_the_fly/$1';
Il sera probablement la ruine de tout le reste ou?
Mettre le "fourre-tout" itinéraire dernier, et assurez-vous que la méthode utilise
error_404()
si il ne trouve pas de quoi que ce soit.Pouvez-vous être plus précis? Si j'ai mis
$route['(:any)'] = 'pages/slug_on_the_fly/$1';
dernier tout avant de visserLes Routes sont vérifiées dans l'ordre, donc
(:any)
ne correspond pas à moins qu'aucune autre voie appariés avant.La correspondance de Route est court-circuité. Le premier itinéraire correspondant gagne, pas le dernier correspondant à un! Même si ce n'était pas court-circuitée, la solution consisterait à mettre
(:any)
comme le premier route, à droite?OriginalL'auteur Derfder | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
Url sont acheminés dans l'ordre suivant:
$route
(routes.php) sont contrôlés afin.[folder/]controller/methodname/args...
est tenté comme une solution de repli.Si vous avez un petit nombre d'itinéraire explicite, vous pouvez simplement les ajouter à
$route
:(Les itinéraires les touches sont vraiment considérés comme des expressions régulières avec
:any
et:num
sont réécrits pour.+
et[0-9]+
.)Si vous avez un grand nombre de ces routes (probablement pas une bonne idée, d'ailleurs!) vous pouvez simplement ajouter un générique de route pour la fin de
$route
:La regex signifie ici "toutes les url qui n'a pas de barres obliques (sauf peut-être la dernière)". Vous pouvez affiner cette pour décrire votre slug format si vous avez d'autres restrictions. (Une bonne
[a-z0-9-]+
.) Si votre contrôleur constate que la chute dans la base de données, vous avez terminé. Si elle ne le fait pas, il doit servir une erreur 404.Cependant, vous donner la possibilité de certains implicite de routage comme Codeigniter ne fournit pas de moyen d'un contrôleur pour "donner" un itinéraire de retour vers le routeur. Par exemple, si vous avez un contrôleur nommé 'foo' et que vous voulez une url comme
/foo
de la route desFoo::index()
, vous devez ajouter une explicite de l'itinéraire pour ce cas, car il serait pris par cette voie, et envoyé àPages::slug_on_the_fly('foo')
à la place. En général, vous ne devriez pas avoir de limaces qui sont également contrôleur de noms de classe! C'est pourquoi vous devriez avoir un très petit nombre de ces url-limaces, si vous avez tout!Si vous avez les deux un grand nombre de ces explicite routes et vous n'êtes pas prêt à respecter ces implicite de routage limitations, vous pouvez essayer de les ajouter à
$route
dynamiquement:routes_extra.php
fichier quiroutes.php
comprend à la fin. Écrire de nouvelles routes dans le cadre de l'enregistrement d'une page ou lorsque vous créez/déployer le site.Router.php
et d'ajouter une nouvelle couche de routage.pre_system
crochet qui ajoute les routes.Je suis sûr qu'il ya d'autres façons.
$route['([^/]+)/?'] = 'pages/slug_on_the_fly/$1'
semble être au travail. Mais j'ai besoin de faire plus de tests. Pour l'instant, merci.OriginalL'auteur Francis Avila
Vous pourriez utiliser des bases de données axées sur les routes.
Ajouter la table
blog_slugs
à votre base de données MySQL:Remplacez le code dans application/config/routes.php avec celui ci-dessous:
Tout ce que vous avez à faire est de créer un enregistrement lorsque vous créez une entrée de blog et vous avez terminé:
vous pourriez cache de la base de données de résultats de la requête. J'ai utilisé une version étendue de ce qui traite de tous mes itinéraires, avec une mise en cache du fichier à lire à partir de la vitesse est bien (pour moi en tout cas). J'utilise github.com/philsturgeon/codeigniter-cache
OriginalL'auteur Rooneyl
Utiliser le 404 remplacer réservés itinéraire contrôleur/méthode. Si un contrôleur valide/route n'existe pas, cette méthode sera appelée. Fonctionne très bien comme un fourre-tout.
OriginalL'auteur Aken Roberts
Supposons que vous avez 3 contrôleurs d'autres que des pages contrôleur de dire controller1, controller2 et controller3 puis,
OriginalL'auteur Girish
Peut-être que cela va vous aider.
OriginalL'auteur Jigar Patel