2014-09-24 28 views
2

我在Laravel 4中构建了一个双语网站,我的URL包含一个语言环境标识符。除此之外,使用正确的语言显示漂亮的slu's声很重要。所以,假设我有一条路线,你会找到马克杯。法语中的等效物将是,口号为可能还是Laravel路线?

目前我在做什么是

Route::get('{locale}/mugs', ['uses' => '[email protected]']); 
Route::get('{locale}/mugs/{id}', ['uses' => '[email protected]']); 

Route::get('{locale}/tasses', ['uses' => '[email protected]']); 
Route::get('{locale}/tasses/{id}', ['uses' => '[email protected]']); 

和短URL /现场检查,并重定向到控制器中的方法可以确保塞是用正确的语言,这样你就不会结束例如/fr/mugs

这工作正常,但可能会变得笨拙,因为如果我做更多的路线,我会有两个。例如,我必须同时有{locale}/mugs/ceramic/{id}{locale}/tasses/ceramique/{id}等。

有没有办法在Laravel中做类似{locale}/mugs|tasses/{id}的事情?甚至检查RegEx?

我知道你可以使用RegEx检查路由参数,但是你可以检查实际的路径组件吗?

回答

2

您可以创建正则表达式模式,做这样的事情:

Route::pattern('mugs', 'mugs|tasses'); 

Route::get('{locale}/{mugs}', ['uses' => '[email protected]']); 
Route::get('{locale}/{mugs}/{id}', ['uses' => '[email protected]']); 
+0

是的!这工作得很好。谢谢。 – magiclantern 2014-09-24 14:29:40

1

你可以这样来做:

Route::get('{locale}/{special}', ['uses' => '[email protected]'])->where('special','^(mugs|tasses)$'); 

special在这种情况下,必须是mugstasses

+0

但现在他所有的路线都会指向'MugsController @ show',他的代码也指向'MugsController @ index'。 – 2014-09-24 13:17:08

+0

@hebron我没有注意到这一点。我刚刚修改了这个ID部分 – 2014-09-24 13:18:31