2014-02-12 34 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