在Laravel 3中,我根据请求URL的第一部分检测到了区域设置。Laravel 4中基于URL的区域设置检测
application/config/application.php
:
/*
|--------------------------------------------------------------------------
| Supported Languages
|--------------------------------------------------------------------------
|
| These languages may also be supported by your application. If a request
| enters your application with a URI beginning with one of these values
| the default language will automatically be set to that language.
|
*/
'languages' => array(
'en',
'de',
'fr',
),
所以我可以定义一个路由
Route::get('foo', function() {
echo 'Foo';
});
,并通过它访问:
GET /en/foo
GET /de/foo
GET /fr/foo
Laravel 4删除此功能。
我可以得到这种行为吗?
我试图手动实现它,但因为我希望它在每个请求上,所以我不想在每个路由中指定语言变量(上面的Route应该与我的实现一起工作)。这里是我的解决方案:
App::before(function($request)
{
$language = Request::segment(1);
if(in_array($language, Config::get('cms.available_languages')))
{
App::setLocale($language);
}
// Since locale is already set,
// I want to remove the language from the request URL (/en/foo => /foo)
// So I can route via Route::get('foo', ...)
$request->removeSegment(1);
}
但是没有办法,我知道,以消除来自请求URL的语言,所以我得到404,因为连接未指定/ foo是使用。
我可以改变什么来使这个工作?
您是否总是想在检测并设置区域设置后从URL中删除语言? – MarkL
我只是试图从URL的语言中去掉'Route's,但是Mikes答案解决了我的问题,谢谢 – Felix