Codeigniter Routes regex en utilisant des tirets dans le contrôleur/noms de méthode
Je suis à la recherche d'une ligne d'un itinéraire à l'autre en pointillés contrôleur et les noms de méthodes pour le réel a souligné contrôleur et les noms de méthode.
Par exemple l'URL
/controller-name/method-name-which-is-long/
route à
/controller_name/method_name_which_is_long/
voir: http://codeigniter.com/forums/viewreply/696690/ qui m'a donné l'idée de demander 🙂
Vous devez vous connecter pour publier un commentaire.
C'est exactement mon exigence trop et j'ai été en utilisant des voies comme
Dans mon précédent projet, j'ai besoin de créer 300-400 règles de routage, la plupart d'entre eux sont dus à tiret de soulignement de conversion.
Pour mon prochain projet, je me suis empressée veux l'éviter. J'ai fait quelques rapides hack et testé, même si n'avez pas utilisé dans n'importe quel serveur, son travail pour moi. Procédez de la manière suivante..
Assurez-vous que le subclass_prefix est comme suit dans votre system/application/config/config.php
Puis de télécharger un fichier nommé MY_Router.php dans système/application/répertoire des bibliothèques.
Maintenant, vous pouvez librement utiliser l'url comme http://example.com/logued/presse-access et il va appeler le bon contrôleur et de la fonction en convertissant automatiquement les tiret de soulignement.
Edit:
Voici notre Codeigniter 2 solution qui remplace la nouvelle CI_Router fonctions:
Maintenant on doit placer ce fichier comme application/core/MY_Router.php et assurez-vous qu'il a subclass_prefix est défini comme
$config['subclass_prefix'] = 'MY_';
dans application/config/config.phpQuelques lignes de code supplémentaires a été ajouté dans la méthode
_validate_request()
:Il est utilisé de sorte que l'on peut faire usage de multi-niveau sous-répertoire à l'intérieur de répertoire controllers, alors que normalement on peut utiliser un seul niveau de sous-répertoire à l'intérieur de contrôleurs de dossier et peuvent l'appeler dans l'url. On peut supprimer ce code s'il n'est pas nécessaire mais il n'a pas tort sur le flux normal.
system/application/core/MY_Router.php
au lieu desystem/application/libraries/MY_Router.php
pour CI pour charger le fichier. Espérons que c'est pour aider à ceux qui cherchent à faire la même chose.Juste de revenir à cette question après la mise à niveau de CodeIgniter 2. Voici une solution qui est plus robuste que l'on a accepté la réponse, car elle va survivre CodeIgniter base des mises à jour.
Il doit être enregistré en tant que
application/core/MY_Router.php
. Maintenant, vous pouvez avoir Contrôleur et les noms de Méthode avec des traits de soulignement comme, par exemple,Abc_Def
(dans le fichierabc_def.php
) et se référer à eux avec l'URL/abc-def
.MY_Router
un.En fait ce qui est natif maintenant dans Codeigniter 3
Viens de le faire dans le fichier de routes
Et il le fera pour les contrôleurs et les méthodes automatiquement .
S'il vous plaît voter cette réponse , comme c'est le plus récent
http://localhost/project/controller_name/method_name
&http://localhost/project/controller-name/method-name
De placer ce fichier MY_Router.php intérieur /application/bibliothèques (CI1) ou /application/core (CI2)
Rappelez-vous que cela aura un effet sur tous les segments, non seulement le module, le contrôleur et la méthode.
Alternative à cette prolongation est d'ajouter à chaque segment de router.php
$route['ceci-est-un-module-ou-controler'] = 'this_is_a_module_or_controller';
Comme vous pouvez le voir étendre la méthode serait plus facile à utiliser. Vous pouvez choisir la fonction à traiter que les deux ou trois premiers segments, de sorte que les autres secteurs ne sont pas touchés, à l' _ remplacement.
/my-controller
ira àmy_controller
mais aussictrl/func/my-data
permettra de convertir les données àmy_data
, qui peuvent casser de nombreux de vos pages (il l'a fait avec le mien). L'on a accepté la réponse est beaucoup plus robuste.for($i = 0; $i < 2; ++$i){ if(isset($segments[$i])){ $segments[$i] = str_replace('-', '_', $segments[$i]); } } parent::_set_request($segments);
C'est une vieille question, mais je tiens à poster ce e-mike avait une excellente solution à ce problème, et beaucoup plus simple.
Espère que cela aide quelqu'un d'autre à ce problème.
Je crois que ce que vous cherchez est un un système, ou une pré-contrôleur crochet que va prendre l'URI de la requête et de les mettre à jour.
Substitution de la classe de Router est une approche agréable, il est aussi un moyen de remplacement - avec _ par l'enregistrement d'un "pré-système" crochet.
D'abord créer le crochet par l'ajout de ces lignes à votre config/hooks.php fichier:
Maintenant créer une " myhooks.php’ fichier au sein de l'application/de crochets dossier et ajouter cette fonction (n'oubliez pas d'ouvrir une balise PHP si c'est la première crochet):
Vous aurez probablement besoin de modifier votre " config/config.php fichier pour permettre à crochets (autour de la ligne 91 pour moi):
Cette réponse est extraite à partir de http://codeigniter.com/forums/viewthread/124396/#644012
Je ne suis pas sûr si vous pouvez le faire avec une route...
Cependant, quelque part dans le Codeigniter bibliothèques de base (éventuellement Routeur ou URI) quelque chose qui convertit l'a souligné uri dans un camelcase nom de la classe.
J'ai eu un coup d'oeil rapide et je ne pouvais pas le trouver, mais si vous le faites, il suffit de copier la bibliothèque de votre application/bibliothèques dossier, et de le modifier il.
Vous pouvez utiliser cette _remap() méthode pour gérer un tel comportement. La Place de cette méthode dans vos contrôleurs ou créer un contrôleur de base et de le placer dans.