我正在Laravel 4中构建一个双语网站,我的网址包含一个区域设置标识符。除此之外,用正确的语言制作好看的slu will是很重要的。所以,假设我有一条路线可以找到马克杯。法语中的等价物将是 tasses 。
目前我正在做的是
Route::get('{locale}/mugs', ['uses' => 'MugsController@index']);
Route::get('{locale}/mugs/{id}', ['uses' => 'MugsController@show']);
Route::get('{locale}/tasses', ['uses' => 'MugsController@index']);
Route::get('{locale}/tasses/{id}', ['uses' => 'MugsController@show']);
在控制器方法中进行简短的URL /区域设置检查和重定向,以确保slug使用正确的语言,因此您不会以/fr/mugs
结束。
这样可行,但可能会变得笨拙,因为如果我再制作任何路线,我会有两个。例如,我必须同时拥有{locale}/mugs/ceramic/{id}
和{locale}/tasses/ceramique/{id}
等
有没有办法在Laravel中做{locale}/mugs|tasses/{id}
之类的事情?或者甚至用RegEx检查?
我知道您可以使用RegEx检查路由参数,但是您可以检查实际的路径组件吗?
答案 0 :(得分:2)
您可以创建正则表达式模式,并执行以下操作:
Route::pattern('mugs', 'mugs|tasses');
Route::get('{locale}/{mugs}', ['uses' => 'MugsController@index']);
Route::get('{locale}/{mugs}/{id}', ['uses' => 'MugsController@show']);
答案 1 :(得分:1)
你可以这样做:
Route::get('{locale}/{special}', ['uses' => 'MugsController@show'])->where('special','^(mugs|tasses)$');
在这种情况下, special
必须是mugs
或tasses