Ну, маршрутизация эффективна - альтернатива переназначение ваших контроллеров .
Давайте рассмотрим обе возможности.
Воображаемая ситуация:
Позже вы захотите позволить своим пользователям показывать значки / медали / достижения / что-то в своем профиле.
С помощью маршрутизации вы можете добиться этого следующим образом:
$route['player/(:any)/(:any)'] = "player/show_$2/$1";
$route['player/(:any)'] = "player/show_profile/$1";
И ваш контроллер может выглядеть так:
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
}
}
}
По сути, это позволяет вам просто добавить другой метод в вашем контроллере с префиксом метода с помощью show_
(например, public method show_friends( $username )
), и вы можете получить к нему мгновенный доступ, перейдя в / player / SomeDude / friends
Если посмотреть на альтернативу , переназначение вашего контроллера позволит вам не использовать маршруты, а написать контроллер следующим образом:
class Player extends CI_Controller
{
public function _remap($username, $params = array())
{
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_array(array($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
}
}
Лично мне нравится маршрутизация. Я думаю, что это прозрачно и заставляет мои контроллеры выглядеть чище.