2015-10-04 1 views
0

D'accord,Codeigniter - le segment URI pour une location variable d'index

donc en gros ce que je veux faire est la route l'URL comme ceci:

www.mypage.com/{controller}/[var1]/{any-function} 

C'est, le segment 2 doit toujours être réservée pour la variable passant dans l'index, tandis que tous les segments suivants devraient appeler les fonctions comme d'habitude. J'ai essayé de jouer avec routes.php mais je n'ai pas réussi à le faire fonctionner.

Comment dois-je aborder cette question?

EDIT:

$route['(:any)'] = "site/$1";  
$route['(:any)/(:any)'] = "site/$1/$1";  
$route['(:any)/(:any)/(:any)'] = "site/$1/$1/$1";  
$route['/(:any)/news'] = "site/index/news"; 
$route['12'] = 'site/index/$1/'; 
$route['47'] = 'site/index/$1/'; 

...

www.mypage.com/news - ne fonctionne (fonction d'appel)

www.mypage.com/12/ - ne fonctionne (variable de passage à l'index)

www.mypage.com/12/news - doesn » T travail et le but est de le faire fonctionner en faisant les deux actions ci-dessus dans l'url singulière. Rappelez-vous qu'il y a plus de fonctions que de simples «nouvelles», alors ne nous limitons pas à cela.

12 -variable; news - fonction existante et fonctionnelle.

+0

> le segment 2 doit toujours être réservé pour passer la variable dans l'index Comment voulez-vous dire? Quand une requête est faite, elle pointe sur une "adresse" spécifique, que ce soit "controller_name/index" ou "controller_name/other_method". Peut-être que vous cherchez [remappage] (https://codeigniter.com/userguide3/general/controllers.html#remapping-method-calls)? – Tpojka

+0

Eh bien, je veux que le premier/second (en fonction du cas si le contrôleur est configuré pour être en url) soit toujours une variable d'un index quelle que soit la fonction que j'appelle. 'mypage.com/controller/news' devrait devenir' mypage.com/controller/var/news'. Par défaut, il recherchera une fonction 'var' qui n'existe pas et n'utilisant pas et ne passant pas cette variable à l'index et ALORS recherchant une fonction 'news' comme je le souhaite. – SmOg3R

+0

Fournissez vos méthodes à quoi elles ressemblent pour le moment et aussi ce que vous avez essayé dans le fichier routes.php. Il est difficile de suivre ce que vous voulez d'une pseudo ligne de code. En question éditée, pas dans le commentaire. – Tpojka

Répondre

0

Problème que vous avez ici est que (:any) placeholder est gourmand et aucun itinéraire ne peut sauter par-dessus pour en mentionner un mentionné. Vous devriez toujours garder les routes génériques à la fin et utiliser des routes spécifiques à la première place.

$route['12'] = 'site/index/$1/'; 
$route['47'] = 'site/index/$1/'; 
$route['/(:any)/news'] = "site/index/news"; 
$route['(:any)/(:any)/(:any)'] = "site/$1/$1/$1"; 
$route['(:any)/(:any)'] = "site/$1/$1"; 
$route['(:any)'] = "site/$1"; 

Essayez cette commande. Aussi docs.

+0

Merci, mais cela ne fonctionne toujours pas pour une raison quelconque - même que c'était avant. Il renvoie juste une erreur de page introuvable avec 'www.mypage.com/12/news'. J'ai déjà lu auparavant ce document que vous avez lié mais il ne semble pas couvrir ce scénario auquel je suis confronté avec variable dans la position constante au milieu de l'URL. – SmOg3R

+0

Je n'ai pas fait assez attention. Probablement 'site/index/news' (si j'ai bien compris que les nouvelles sont aussi des méthodes) ne peut pas être une demande valide. Fondamentalement, vous devriez faire du code que vous pouvez approcher en tapant du côté droit des routes dans le navigateur. Avez-vous résolu cela en premier? Le routage n'est pas un problème si vous avez du code de travail. Donc, le problème est dans votre contrôleur. Postez votre contrôleur de site aussi. – Tpojka

+0

/news fonctionne parfaitement bien par elle-même car il achemine vers 'site/index/news' et charge tout correctement. Le problème est qu'avec les paramètres de routage actuels, le CI ne veut tout simplement pas charger de fonction (méthode) APRÈS que je lui ai donné une variable d'index. Ne peut pas sembler trouver un moyen de lui dire qu'après la variable ('12') vient un appel à fonctionner du contrôleur de site. Encore une fois, séparément, les deux actions fonctionnent très bien, c'est juste que c'est passer une variable à indexer ou appeler une fonction, pas les deux. – SmOg3R

0

J'ai fini par créer 2 nouvelles fonctions dans le contrôleur principal (comme j'avais seulement besoin de 2 variables possibles), appelons-les F1; F2, et appelant index par en conséquence

mywebsite.com/F1 ou F2/index ou la fonction

me permettant d'avoir des fonctions à la place de vars comme une solution de contournement. Ainsi, dans l'exemple OP, 12 serait fonction (F1 ou F2), pas variable.