Codeigniter Routing – Usandolo troppo?

Sono nuovo di Codeigniter e sto cercando di abituarmi convertendo un vecchio sito in CI.

Una cosa che ho difficoltà a capire è il routing. Se non voglio avere la mia struttura url come / controller / method / id, devo cambiarla in qualcosa come $route['controller/(:num)'] = "controller/method/$1"; in routes.php. Mi sembra inefficiente, c'è qualcos'altro che dovrei fare?

Ad esempio, sul mio sito, gli URL sono / game / 4242 e / player / SomeDude

Bene, il routing è efficiente: l'alternativa è la rimapping dei controller .

Diamo un'occhiata a entrambe le possibilità.

Una situta immaginaria: in un secondo momento, desideri consentire ai tuoi utenti di mostrare distintivi / medaglie / risultati / qualcosa sul loro profilo.

Con il routing, puoi ottenerlo in questo modo:

 $route['player/(:any)/(:any)'] = "player/show_$2/$1"; $route['player/(:any)'] = "player/show_profile/$1"; 

E il tuo controller potrebbe a sua volta apparire come questo:

 class Player extends CI_Controller { public function show_profile( $username ) { // the profile info } public function show_badges( $username ) { // the profiles badges } public function show_scores( $username ) { // the profiles scores } } 

}

Fondamentalmente, questo ti permette semplicemente di aggiungere un altro metodo nel tuo controller che precede il metodo con show_ (come public method show_friends( $username ) ) e puoi accedervi istantaneamente andando su / player / SomeDude / friends

Osservando l'alternativa , rimappare il controller ti permetterebbe di non usare rotte, ma scrivere un controller come questo:

 class Player extends CI_Controller { public function _remap($username, $params = arrays()) { if(empty($username)) show_404(); $this->user = $this->user_model->find($username); if(count($params) == 0) $method = 'index'; else $method = $params[0]; unset($params[0]); //No need to send the method along as a parameter $method = 'process_'.$method; if (method_exists($this, $method)) { return call_user_func_arrays(arrays($this, $method), $params); } show_404(); } public method process_index() { // the profile info } public method process_badges() { // the profiles badges } public method process_scores() { // the profiles scores } } 

Personalmente, mi piace il routing. Penso che sia trasparente e rende i miei controller più puliti.