【问题标题】:Confused about codeigniter routes order对 codeigniter 路由顺序感到困惑
【发布时间】:2015-12-18 00:41:04
【问题描述】:

我只是在学习 codeigniter,但被以下内容难住了:

我的路由文件中有这些路由:

$route['(:any)'] = 'pages/view';
$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['default_controller'] = 'pages/view';

然而,当我加载 http://mysite/index.php/news 时,它加载的是新闻页面而不是“页面/视图”。我认为因为我在顶部有包罗万象的路线,所以这个页面也只会加载页面/视图。

我哪里错了?

【问题讨论】:

  • 捕获所有路线应该在最后。但是如果你为新闻定义了一个路由,它就会去新闻。
  • 这不是有点违背命令的目的吗?
  • 不,这是合乎逻辑的:您首先定义您的“特殊”路线,如果还有其他内容,请转到页面/视图。所以如果你想要新闻去pages/view只需删除新闻路线。
  • 但是如果我说的正在发生,那么似乎即使我先定义任何一个,它仍然会指向“特殊”控制器,这让我感到困惑,因为我认为顺序很重要,这似乎建议它没有。我知道我可以删除新闻路线,我只是想理解。鉴于首先定义了 any toutes 并且顺序很重要,我可以想象当 url 包含新闻时调用 any 路由,尽管有新闻路由。
  • 是的,对不起,我错了。用 CI2 和 3 测试,似乎顺序没有任何影响。

标签: php codeigniter routes


【解决方案1】:

原因是 :any 不匹配斜线,至少从 CI 3.0+ 开始。因此,您的第一条路线规则不再是“包罗万象”。 http://www.codeigniter.com/user_guide/installation/upgrade_300.html?highlight=any#routes-containing-any

【讨论】:

  • 好吧,即使它本身不是“包罗万象”,它仍然应该捕捉“新闻”,因此不应该加载“页面/视图”吗?但它仍在加载让我感到困惑的新闻控制器:-/
  • 我不知道你是如何组织你的服务器(可能是apache?)配置,但我认为避免“index.php”段是安全的。甚至可能是“临床案例”部分。但同样,我不知道你的服务器配置。
【解决方案2】:

any 和 num 对于 codeigniter 中的路由很重要。

我们将使用any作为字符串值,例如order001。

我们将使用 num 表示整数值,例如 001。

$route['(:any)'] = 'pages/view/$1';

$1 是为第一个参数定义的。

$route['(:any)/(:any)'] = 'pages/view/$1/$2';

2个参数传入url。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多