17

Dies scheint wirklich einfach, aber ich kann nicht den Dreh raus.Wie route ich 2 Parameter zu einem Controller?

Ich versuche, mehr als einen Parameter auf ein Verfahren in dem Controller zu senden, wie folgt aus:

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

Dies ist der Routings ich versucht habe:

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

das Verfahren akzeptiert 2 parameter:

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

} 

aber ich scheine einen 404 zu bekommen. Wie kann ich das zur Arbeit bekommen? Ich brauche die View-Methode, um immer 1 Parameter und optionale andere Parameter zu akzeptieren.

HINWEIS: Ich schließe den URL-Helfer ein.

+1

diese $ route versuchen [ 'Themen/(: num)/(: any)'] = ‚Themen/view/$ 1/$ 2 '; wird funktionieren – umefarooq

+1

Das hat funktioniert, das Problem wurde ich {} statt() verwendet. Danke, schicke es als Antwort ein. –

Antwort

30

Sie haben Probleme mit Ihrem Weg Klammern ändern sie nur von {} bis() Klammern

arbeiten

von

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

zu

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

Doing, dass mich auf eine endlose Schleifen von erfrischend fest, so dass ich denke, hier etwas falsch ist ... –

+0

Eric, haben Sie immer noch ein Problem, weil dies für Ihre Situation funktionieren sollte. Gibt es ein anderes benutzerdefiniertes Routing? – Malachi

+0

Ya ich löste es, das Problem war mit URLs von Ajax namens ich gemacht, dass Infinte-Schleife verursacht, aber ich reparierte diese. Vielen Dank! –

6

immer Ihre Routing-Regeln halten

wie

$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'; 

immer folgen diesem Muster für das Routing

, wenn Sie diese

hinzufügen
$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'; 

dann immer erste Bedingung wird jedes Mal der Fall sein.

auch diesen Link verweisen ->codeigniter routing rules

1

Ich habe einmal versucht, dieses Muster 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'; 

aber es hat nicht funktioniert ... also ich ersetzen sie mit regulärem Ausdruck

([a-z 0-9 -]+) ersetzt (:any) und ([0-9]+) ersetzt (:num)

so wurde es

$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'; 

Und es funktionierte für mich :)

Verwandte Themen