【问题标题】:How to use a dynamic variable in Laravel group routes?如何在 Laravel 组路由中使用动态变量?
【发布时间】:2018-02-14 09:20:18
【问题描述】:

例如:

 Route::group(['prefix' => '{lang?}'], function () {
 //..
 });

在中间件中创建变量:

public function handle($request, Closure $next){

$lang = session('locale');

App::setLocale($lang);

return $next($request);      
});

也尝试获取前缀中的数据,但是得到了null

Route::group(['prefix' =>  config('app.locale')], function () {
//..
});

Route::group(['prefix' =>  session('locale')], function () {
//..
});

通过会话更改语言单独路由

Route::get('setlocale/{locale}', function ($locale) {

session(['locale' => $locale]);

return redirect()->back();

})->name('setlocale');

提前感谢您的帮助。

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    您不需要将您的路由分组到 lang 路由下,您可以创建自己的中间件并将您的路由分组到该中间件下,并在其中使用以下代码:

    public function handle($request, Closure $next){
         $lang = request->get('locale');
         $currentLang = App::getLocale();
    
         //If locale exists in the url and it's changed
         if($lang && $lang != $currentLang) App::setLocale($lang);
    
         //If locale doesn't exist in the url, fallback to default locale
         if(!$lang) App::setLocale('en');
    
         return $next($request);      
     });
    

    网址应为data/store?locale=en,您的网址应始终在网址中的? 之后附加locale,否则将使用您的默认locale

    编辑:由于您的路由包含 locale 作为 url 的一部分,而不是作为请求参数,所以我建议您使用库来为您处理这个问题,因为您将拥有在你能够有一个工作示例之前要做很多事情:Laravel localization mcmara

    【讨论】:

    • 在我的网址中没有添加domain.com/fr/ 尽管Ap::getLocale () - fr
    • 我听不懂?
    • 只有当这不是默认语言环境时,我才需要为域语言环境之后的所有路由添加到 url,例如 domain.com/locale/
    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多