Laravel 本地化和来自 Jetstream / Fortify 的路由

Jer*_*olo 4 localization laravel laravel-localization laravel-8 laravel-jetstream

我有这个新的 Laravel 项目要处理。我们希望提供多种语言版本。

我用 JetStream 开始了这个项目。JetStream / Fortify 会自动处理身份验证路由等。然后我添加了https://github.com/mcamara/laravel-localization来处理本地化。它适用于我自己创建的路线:

Route::group(
    [
        'prefix' => LaravelLocalization::setLocale(),
        'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ]
    ], function()
{
    Route::get('/', function () {
        return view('welcome');
    });

    Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
        return view('dashboard');
    })->name('dashboard');
});
Run Code Online (Sandbox Code Playgroud)

但是如何在 Jetstream 和 Fortify 处理的路由上设置组、前缀和中间件?

[编辑]

因此,在@TEFO 提出一些建议之后,我正在尝试添加一个中间件来处理语言环境的设置。添加 :

强化.php :

    'path' => '{lang}',
    'middleware' => ['web', 'setLang']
Run Code Online (Sandbox Code Playgroud)

新的中间件 setLang :

class SetLang {
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle(\Illuminate\Http\Request $request, Closure $next) {
        // $lang = 'en';
        // $request->attributes->add(['lang' => 'en']);
        $request->route()->setParameter('lang', 'en');
        // $request->request->set('lang', 'en');

        return $next($request);
    }
}
Run Code Online (Sandbox Code Playgroud)

将中间件添加到$routeMiddleware.

我在尝试到达时收到此错误http://mylaravel/en/login

ErrorException
Missing required parameters for [Route: login] [URI: {lang}/login]. (View: /var/www/resources/views/auth/login.blade.php)
Run Code Online (Sandbox Code Playgroud)

Jer*_*olo 12

终于成功的解决了这个问题。我只是禁用了 Fortify 和 Jetstream 的路由,将它们复制过来,然后将它们塞进我的分组前缀路由中。仍在使用https://github.com/mcamara/laravel-localization但它应该可以随心所欲地工作 - 制作自己的系统或其他任何东西,只要您控制路线即可。

JetstreamServiceProvider 中

public function register() {
        Jetstream::ignoreRoutes();
    }
Run Code Online (Sandbox Code Playgroud)

FortifyServiceProvider 中

public function register() {
        Fortify::ignoreRoutes();
    }
Run Code Online (Sandbox Code Playgroud)

并将来自 Fortifyvendor/laravel/fortify/routes/routes.php和 Jetstream 的路由vendor/laravel/jetstream/routes/livewire.php(如果你正在使用它,我想适应 Inertia)到你的web.php文件,在你需要的前缀的路由组中。

  • 您没有所有路线的 c&p。我们可以轻松地将它们包括在内。Route::group([ 'namespace' => 'Laravel\Fortify\Http\Controllers', ], function () { require(base_path('vendor/laravel/fortify/routes/routes.php')); }); (3认同)