【问题标题】:codeigniter routing (regex)codeigniter 路由(正则表达式)
【发布时间】:2011-06-22 02:29:08
【问题描述】:

我正在尝试按如下方式路由 url:

domain.com/param/some_controller/method/

映射到

some_controller::method($param)

我不擅长正则表达式,我相当肯定这是必要的,所以如果有人可以帮助我开始,我会非常感激?或者指出一个好的教程或示例?

【问题讨论】:

  • domain.com/param/some_controller/method/ 是填充到某个变量中的字符串吗?就像,我可以假设http(s):// 协议永远不会存在,并且字符串将始终采用该确切格式,或者不是? (我对 CI 不熟悉。)
  • @Wiseguy - 所有这些都由 CI 处理,并且还有一些重写规则,因此 url 实际上 domain.com/index.php?param/some_controller/method

标签: php regex codeigniter routing


【解决方案1】:
$route['(:any)/some_controller/method/'] = "some_controller/method/$1";

如果您的参数是数字,请改用(:num)

在你的控制器中

function method($my_param) {
    echo 'my param is '. $my_param;
}

一个 RL 示例:

$route['(:num)/blog/entry/'] = "blog/view/$1";

class Blog extends CI_Controller {

    function view($id) {
         echo 'fetching blog entry no ' . $id;
    }
}

你的视图看起来像

view.php

<html>
<body>
link to <?= anchor('1/blog/entry/','my first post'); ?>
link to <?= anchor('2/blog/entry/','my second post'); ?>
</body>
</html>

【讨论】:

    【解决方案2】:

    这有点混乱,因为目前没有办法通过路由来做到这一点而不会混淆事物。你可以试试这个:

    $route['([^/]+)/([^/]+)/([^/]+)'] = "$2/$3/$1";
    

    但是这意味着它将适用于任何 url:这会使常规控制器感到困惑。您最好添加一些前缀来识别您应该使用此路由处理的请求:例如

    $route['a/([^/]+)/([^/]+)/([^/]+)'] = "$2/$3/$1";
    

    【讨论】:

    • 如果我只订购以上所有常规控制器会怎样?他们不走第一条匹配的路线吗?
    • 好吧,如果你列出了每一个你可能得到的 URL,那么是的。这对于大量 URL 来说似乎很痛苦,但如果你只有 5 个或 10 个甚至 20 个,那也不会很糟糕。
    • @Femi - 是的,很可能少于 5 个,这条路线可能只有 2 或 3 个例外!我会尽快试试你的方法
    【解决方案3】:

    同样的效果,但 Codeigniter 风格:

    //remember that custom routes need to go _after_ ci's default routes, as they're executed in the order you provide them
    $route['default_controller'] = "welcome";
    $route['404_override'] = '';
    //exception 1 to your regex here
    //exception 2 to your regex here
    //so on...
    $route['(:any)/(:any)/(:any)'] = "$2/$3/$1";
    

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 2012-09-23
      • 2012-06-28
      • 2010-12-30
      • 2013-05-07
      • 2012-08-08
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多