【发布时间】:2016-04-24 06:38:26
【问题描述】:
我正在寻找一种方法,使所有应用程序路由具有多个区域设置,而无需使用路由组。这是因为我使用了外部扩展包,这意味着路由在很多地方都注册了。
基本上我希望 /foo/bar 以及 /en/foo/bar、/de/foor/bar、/es/foo/bar 等都被 /foot/bar 路由识别和处理
Route::get('foo/bar', function () {
return App::getLocale() . ' result';
});
所以上面会给我'en result'或'de result'或'es result'。
我已经有基于路径段设置语言环境的中间件。我试过以下没有运气。
...
$newPath = str_replace($locale,'',$request->path());
$request->server->set('REQUEST_URI',$new_path);
}
return $next($request);
希望这是可能的,或者有其他方法可以实现。
编辑------
根据下面的评论,我通过将以下代码添加到 public/index.php 中快速破解了它。希望这可以更好地了解我通过编辑请求对象想要实现的目标。
$application_url_segments = explode( '/', trim( $_SERVER["REQUEST_URI"], '/' ) );
$application_locale = $application_url_segments[0];
$application_locales = ['en' => 'English', 'de' => 'German'];
if ( array_key_exists( $application_locale, $application_locales ) ) {
$_SERVER["REQUEST_URI"] = str_replace( '/' . $application_locale,'',$_SERVER["REQUEST_URI"] );
}
【问题讨论】:
-
我个人找不到任何可以轻松完成您所追求的事情的方法。虽然我可能错过了一些东西,但我查看了 laravel 和 symfonys 的 Request 类。不幸的是,我没有找到任何有价值的东西。话虽如此,您可以在public文件夹中的index.php文件中拦截请求,然后在创建请求对象之前设置
$_SERVER["REQUEST_URI"],它将起作用。 -
我很快在 index.php 文件中尝试了一些东西,这意味着我可以在服务器变量到达 Laravel 之前对其进行编辑。但是我认为我需要更好的东西,因为我将配置用于语言环境等。
-
我面临同样的问题,我也无法让它工作。
Request对象似乎是不可变的。我也在 index.php 中设置了一个快速破解,但我也将 URI 用于语言环境等,所以仍在研究中。
标签: laravel routes middleware