2014-02-12 60 views
6

如何定義的情況下,不區分大小寫路線(一部分)?Laravel不區分大小寫路線

實施例:

在路線的固定部分的任何使用大寫不起作用:

我明白,我怎麼可以讓像{parameter}這樣的參數使用 - > with()來使用正則表達式模式,但是這並不能幫助我處理路徑的固定部分,就像上面描述的那樣。

+0

嚴格說,使用參數和正則表達式*可以*幫助您的具體問題(把輪廓變成動態參數,指定臨時工它必須是不區分大小寫的'profile'這個詞),但我明白這遠非理想的解決方案。儘管有明確的制止措施。 – alexrussell

+0

固定部分不能不區分大小寫,但如果它是一個動態參數,則可以按照您已知的方式完成。 –

+0

是否嘗試過類似'Route :: get('{userId}/{profile}','Controller @ action') - > where('profile','/ profile/i');'? – Gadoma

回答

5

這可以通過定義路由的以下方式解決:

Route::get('/{userId}/{profile}')->with('profile', '(?i)profile(?-i)'); 

更聰明,把它定義爲pattern,那麼它也是在路由組變爲可用。

Route::pattern('profile', '(?i)profile(?-i)'); 
Route::get('/{userId}/{profile}'); 
+0

不錯。我喜歡圖案解決方案 – ryanwinchester

+0

這對我來說剛剛起了作用。謝謝。 – ceejayoz

0

添加模式只適用於一個路由的時間,如果你希望所有的路線是部分在此之前不區分大小寫添加到您的文件/app/filter.php:

我寫了一個依據該做到這一點:https://gist.github.com/samthomson/f670f9735d200773e543

編輯您的應用程序/ filters.php檢查在路由大寫字符並重定向到一個轉換後的路由。

0

對於使用Apache,你也可以做到這一點的:

在此您虛擬主機文件的頂部添加

RewriteEngine On 
RewriteMap lowercase int:tolower 

,並在您的.htaccess

RewriteCond $1 [A-Z] 
RewriteRule ^(.*)$ /${lowercase:$1} [R=301,L] 
+0

我沒試過提到的解決方案,但剛來到想想URL的一般轉換爲小寫:當大小寫敏感的參數是通過URL一起傳遞部分航線可能需要混合大/小寫,例如(如某些哈希類型等)。 – preyz