路由中未定义的变量(Codeigniter)


Undefined variable in Routing (Codeigniter)

我想尽量减少我的URL,但我有一个问题。我在Routes.php中的路由是这样的:

$route["news/(:num)"] = "home/news/$news";

Home控制器中,我有news函数,它接受参数$newshttp://localhost/bestcarsinfo/home/news/7

但是当我使用新的URL版本http://localhost/bestcarsinfo/news/7我得到错误提示:

未定义变量:news in config/routes.php

正如错误提示所示,$news未定义。路由器使用$1(或其他数值)作为引用来替代解析路由的正则表达式,你不能给它传递任意变量。

应该是:

$route["news/(:num)"] = "home/news/$1";

Router.php核心类中的一个片段:

if (preg_match('#^'.$key.'$#', $uri))
{
   // Do we have a back-reference?
   if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE)
   {
      $val = preg_replace('#^'.$key.'$#', $val, $uri);
   }
   return $this->_set_request(explode('/', $val));
}