gpt4 book ai didi

Laravel 5.0.* 中间件在处理路由之前从 url 中删除前缀语言环境

转载 作者:行者123 更新时间:2023-12-04 20:36:22 33 4
gpt4 key购买 nike

我正在寻找一种方法,可以在不使用路由组的情况下使所有应用程序路由具有多个语言环境。这是因为我使用了一个外部扩展包,这意味着路由在很多地方都注册了。

基本上我想让/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"] );

}

最佳答案

这是在调用路由之前编辑 URL 的正确代码。

<?php namespace App\Providers;
use Illuminate\Foundation\Application;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Request;

class LanguageServiceProvider extends ServiceProvider {
public function register() {
Request::instance()->server->set('REQUEST_URI',"/uri/");
}
}

请注意,从 Request 实例中获取路径而不首先复制它会由于某种原因导致 REQUEST_URI 不可编辑。我假设当您调用 path() 方法时,laravel 代码库中的某个地方正在初始化请求。

关于Laravel 5.0.* 中间件在处理路由之前从 url 中删除前缀语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34865784/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com