2013-04-10 47 views
1

我在我的應用程序中創建路線,我想知道它是否可以將url中的斜線轉換爲我的api中的下劃線。使用URI路由將斜線轉換爲下劃線

這裏是我想要做的一個例子:

http://www.example.dev/api/v1/test/supertest.json?id=7&test=whatever

在我的路線也有這樣解釋:

http://www.example.dev/api/test_supertest/format/json?id=7&test=whatever

我成功了有關格式和版本,但不是test_supertest

這裏是我的實際路線:

$route['api/'.config_item('rest_api_version').'/(:any)'.'(/.*)'.'(\.:any)'.'(:any)'] = 'api/$1_$2$4&format=$3'; 

如何轉換的斜線強調?

+0

我假定'supertest'被轉換爲'superstuff'是一個錯字。 – 2013-04-10 11:35:57

+0

Oups,編輯:) – Simon 2013-04-10 11:46:19

回答

2

路線:

$route['api/' . config_item('rest_api_version') . '/([^/]+)/([^.]+)\.([^?]+)\?(:any)'] = 'api/$1_$2/format/$3?$4'; 

正則表達式分解:

  1. api/' . config_item('rest_api_version') . '/匹配API版本

  2. ([^/]+)匹配1個或多個字符不屬於/

  3. /匹配一個/

  4. ([^.]+)匹配1個或多個字符不屬於.

  5. \.匹配一個.

  6. ([^?]+)匹配1個或多個字符不屬於?

  7. \?匹配一個?

  8. (:any)匹配任何字符

替換故障:

api/$1_$2/format/$3?$4

$1被替換爲匹配從上述列表項2

$2被替換爲匹配從上述列表項4

$3被替換爲匹配從上述列表項6

$4被替換爲匹配從上述列表項8

結果:

http://www.example.dev/api/v1/test/supertest.json?id=7&test=whatever

變爲

http://www.example.dev/api/test_supertest/format/json?id=7&test=whatever

+0

這真的很奇怪,我建立了這條路線: DEBUG - 10-04-2013 13:55:38 - >重定向到:api/v1.0/test/supertest.json - > api/test_supertestn&format = jso – Simon 2013-04-10 11:56:35

+0

爲什麼從json發出的n超級超過oO這真的很奇怪 – Simon 2013-04-10 11:57:05

+0

@Simon不知道是什麼原因導致它,但嘗試上面編輯的答案。我希望顯式匹配'?'將修復它,因爲它看起來'?'與文件擴展名中的最後一個字符匹配。 – 2013-04-10 12:14:15

相關問題