可能或Laravel路线?

时间:2014-09-24 13:04:44

标签: php laravel laravel-4 localization laravel-routing

我正在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检查路由参数,但是您可以检查实际的路径组件吗?

2 个答案:

答案 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必须是mugstasses