Laravel prefix 语言前缀如果有

Laravel prefix language prefix if it has

我想在 Laravel 中使用语言选择器。我使用了这个解决方案:Laravel optional prefix routes with regexp。 它工作正常。我将位置存储在数据库中,例如:en, de。 只有当网站在数据库中设置了多种语言时,我才想使用前缀。那么如果我只有一种语言,我该如何防止使用'prefix' => '{lang?}'

这是我的web.php(路线):

Route::group(['prefix' => '{lang?}', 'middleware' => 'locale', 'where' => ['lang' => "en|de"], function () {
    Route::get('/', 'HomeController@index');
    Route::get('article', 'ArticlesControllerController@index');
});

使用 1 种语言:

/home
/article

多语言:

/en/home
/de/home
/en/article
/de/article

那么在这种情况下,你可以使用闭包函数和if条件。根据值设置前缀,因为可以为所有路由声明闭包,并添加一次带前缀和一次不带前缀:

$languageList = 'fr|en';

$optionalLanguageRoutes = function() {
    Route::get('/test', 'DashboardController@test');
};

// Add routes with lang-prefix
if ($languageList) {
    Route::group(
        ['prefix' => '/{lang}/', 'where' => ['lang' => $languageList]],
        $optionalLanguageRoutes
    );
}

// Add routes without prefix

$optionalLanguageRoutes();

当您没有语言时声明空语言列表。