2017-06-16 30 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