【问题标题】:Undefined variable in Routing (Codeigniter)路由中的未定义变量(Codeigniter)
【发布时间】:2014-05-21 09:05:44
【问题描述】:

我想最小化我的网址,但我遇到了问题。我在 Routes.php 中的路由如下所示:

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

Home 控制器中,我有news 函数,它接受参数$news。 这是工作http://localhost/bestcarsinfo/home/news/7

但是当我使用新的 URL 版本时http://localhost/bestcarsinfo/news/7 我收到错误消息:

未定义变量:newsinconfig/routes.php

【问题讨论】:

    标签: php codeigniter routes


    【解决方案1】:

    好吧,正如错误所说,$news 是未定义的。路由器使用 $1(或其他数值)作为替换解析路由的 regex 的参考,您不能将任意变量传递给它。

    应该是:

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

    Router.php 核心类的一个 sn-p:

    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));
    }
    

    【讨论】:

    • 谢谢。它正在工作,但我不明白这个想法本身。我的函数应该采用参数 $news。我在这里写 1 美元。还是 $1 是默认变量?
    • $1 是与正则表达式匹配的 1st 元素的引用(在本例中为 (:num) )。您不传递实际变量,因为路由器不知道也不关心。
    • 现在我明白了。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多