Codeigniter路由 - 使用它太多了?

Mot*_*ive 1 php codeigniter url-routing

我是Codeigniter的新手,我试图通过将旧网站转换为CI来习惯它.

我无法理解的一件事是路由.如果我不想拥有像/ controller/method/id这样的url结构,我必须将它更改为$route['controller/(:num)'] = "controller/method/$1";routes.php中的内容.这对我来说似乎效率低下,我还应该做些什么吗?

例如,在我的网站上,网址是/ game/4242和/ player/SomeDude

Rep*_*pox 7

嗯,路由是有效的 - 另一种方法是重新映射您的控制器.

我们来看看两种可能性.

想象中的假设:稍后,您希望允许您的用户在其个人资料中显示徽章/奖牌/成就/某些内容.

通过路由,您可以像这样实现:

$route['player/(:any)/(:any)'] = "player/show_$2/$1";
$route['player/(:any)'] = "player/show_profile/$1";
Run Code Online (Sandbox Code Playgroud)

而你的控制器可能看起来像这样:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

}

基本上,这允许你简单地在你的控制器中添加另一个方法前缀方法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
  }

}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我喜欢路由.我认为它是透明的,使我的控制器看起来更干净.