17

Questo sembra davvero semplice ma non riesco a farcela.Come indirizzare 2 parametri a un controller?

sto cercando di inviare più di un parametro a un metodo nel controller, in questo modo:

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

Questo è il routing che ho provato:

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

il metodo accettato 2 paremeters:

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

} 

ma mi sembra di ottenere un 404. Come posso farlo funzionare? Ho bisogno del metodo di visualizzazione per accettare sempre 1 parametro e altri parametri facoltativi.

NOTA: Ho incluso l'helper dell'URL.

+1

provare questo $ route [ 'soggetti/(: num)/(: qualsiasi)'] soggetti ='/ view/$ 1/$ 2 '; funzionerà – umefarooq

+1

Questo ha funzionato, il problema era che ho usato {} invece di(). Grazie, inviala come risposta. –

risposta

30

avete problemi con i vostri staffe percorso basta cambiare da {} a() parentesi lavoreranno

da

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

a

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

In questo modo mi sono bloccato su una serie infinita di aggiornamenti, quindi immagino che ci sia qualcosa di sbagliato qui ... –

+0

Eric, hai ancora un problema perché questo dovrebbe funzionare per la tua situazione. C'è un altro percorso personalizzato in corso? – Malachi

+0

Ya l'ho risolto, il problema era con URL di ajax chiamato ho fatto che ha causato infinte loop ma ho risolto quelli. Grazie! –

6

mantenere sempre le regole di routing

come

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

seguono sempre questo schema per il routing

se si aggiunge in questo modo

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

quindi sempre prima condizione sarà vera ogni volta.

vedere anche questo link ->codeigniter routing rules

1

una volta ho provato questo schema 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'; 

ma che non ha ancora funzionato ... così ho sostituito con l'espressione regolare

([a-z 0-9 -]+) sostituito (:any) e ([0-9]+) sostituito (:num)

così è diventato

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

e ha funzionato per me :)

Problemi correlati