web-dev-qa-db-fra.com

Comment router 2 paramètres vers un contrôleur?

Cela semble vraiment basique mais je n'arrive pas à comprendre.

J'essaie d'envoyer plus d'un paramètre à une méthode dans le contrôleur, comme ceci:

http://localhost/ci/index.php/subjects/3/state

Voici les routages que j'ai essayés:

$route['subjects/(:num)'] = 'subjects/view/$1';
$route['subjects/(:num)/{:any}'] = 'subjects/view/$1/$2';

la méthode a accepté 2 paramètres:

public function view($slug, $id = null){

}

mais il me semble que j'obtiens un 404. Comment puis-je faire en sorte que cela fonctionne? j'ai besoin de la méthode de vue pour toujours accepter 1 paramètre et d'autres paramètres facultatifs.

NOTE : J'inclus l'assistant d'URL.

21
eric.itzhak

vous avez un problème avec vos crochets de route, changez-le simplement de {} à () les crochets fonctionneront

de

$route['subjects/(:num)/{:any}'] = 'subjects/view/$1/$2';

à

$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';
39
umefarooq

Maintenez toujours vos règles de routage

comme

$route['subjects/(:num)/(:any)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3/$4';
$route['subjects/(:num)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3';
$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';

suivez toujours ce modèle pour le routage

si vous ajoutez comme ça

$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';
$route['subjects/(:num)/(:any)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3/$4';
$route['subjects/(:num)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3';

alors toujours la première condition sera vraie à chaque fois.

référez également ce lien -> règles de routage codeigniter

7
PHP Team

J'ai essayé une fois ce modèle d'URI

$route['(:any)'] = 'welcome/list1/$1';
$route['(:any)/(:num)'] = 'welcome/list1/$1/$2';

$route['(:any)/(:any)'] = 'welcome/list2/$1/$2';
$route['(:any)/(:any)/(:num)'] = 'welcome/list2/$1/$2/$3';

$route['(:any)/(:any)/(:any)'] = 'welcome/list3/$1/$2/$3';

mais cela n'a pas fonctionné ... alors je l'ai remplacé par une expression régulière

([a-z 0-9 -]+) remplacé (:any) et ([0-9]+) remplacé (:num)

il est donc devenu

$route['([a-z 0-9 -]+)'] = 'welcome/list1/$1';
$route['([a-z 0-9 -]+)/([0-9]+)'] = 'welcome/list1/$1/$2';

$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)'] = 'welcome/list2/$1/$2';
$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)/([0-9]+)'] = 'welcome/list2/$1/$2/$3';

$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)/([a-z 0-9 -]+)'] = 'welcome/list3/$1/$2/$3';

Et ça a marché pour moi :)

2
Ankur Singh