如何制作带前缀的子路由但可以在 Laravel 中不带前缀工作?

How to make sub-routes with prefix but can work without prefix in Laravel?

我正在使用 Laravel 构建一个多语言网站,但我遇到了有关区域设置的问题。

我现在有 2 种语言 (Ar/En),我的路线接受前缀来确定语言。

我希望我的路由在没有前缀的情况下有效并设置默认区域设置。

我当前的代码是:

Route::group([
    'prefix' => '/{locale?}',
    'where' => ['locale' => '^(ar|en)$'],
    'middleware' => ['setLocale']
], function(){
    Route::get('/', function () {
        return view('home');
    });

    Route::get('test', function (){
        return 'test';
    });
});

它适用于第一条路线,但对于任何子路线,如果没有提供前缀,它就不起作用!

你可以定义一个fallback route

Route::fallback(function () {
    abort_if(in_array(request()->segment(1), ['ar', 'en']), 404);

    return redirect()->to(url(app()->getLocale().request()->getPathInfo()));
});