2017-06-16 66 views
0

我已将Codeigniter版本2.x升级到3.x,并注意到传递多个段时URI路由的行为不同。Codeigniter uri路由在版本3.x中发生了变化

在2.x版的,我能够通过以下网址的变化:

domain.com/function/arg1
domain.com/function/arg1/arg2
domain.com/function/ ARG1/ARG2/ARG3

$路线[ '函数/(:任何)'] = '功能/ $ 1'将针对给定的所有三个URL变化的工作,我的函数调用功能($ ARG1,$ arg2 = 0,$ arg3 = 0)它允许arg2和arg3是可选的,并在路由规则中以$ 1的形式传入。

为了它在3.x版的工作,我发现我必须设置我的路由为:

$路线[“函数/(:任何)”] =“功能/ $ 1” ;
$ route ['function /(:any)/(:any)'] ='function/$ 1/$ 2'; $ route ['function /(:any)/(:any)/(:any)'] ='function/$ 1/$ 2/$ 3';

有没有什么办法可以简化路由,以便它可以通过所有剩余的段,而不必为每个可能段数的变化创建单独的路由规则?

+0

我觉得笨3是严格的有关参数的数目,所以我不知道是否有一个简单的方法让你使用更少的路线。 – pacificpelican

+0

您是否阅读过[v3.0升级说明](https://www.codeigniter.com/user_guide/installation/upgrade_300.html)? – Sparky

回答

2

(:any)是不应该的/字符匹配,并且这个错误是固定在版本3

您应仔细阅读the v3.0 upgrade guide ...

报价"Routes containing :any" -

有当然许多开发人员已利用此错误作为实际功能。如果你是其中之一,并想匹配斜杠,请使用.+正则表达式:

(.+) // matches ANYTHING 
(:any) // matches any character, except for '/' 
+0

谢谢 - 我一定忽略了v3.0升级笔记的一部分! – Scott