2017-06-04 39 views
1

在路由文件傳遞指定的參數控制器在laravel routes文件我寫了這個:在laravel

Route::get('/{lang}/{page}', '[email protected]')->where('lang' , $langPattern); 

,並在頁面控制器我寫了這個:

public function get($lang,$page) 
{ 
    // do something 
} 

但我只想使用頁面參數

我創建了一箇中間件來選擇語言,並且在控制器中不需要$ lang

我該如何刪除它?

我可以寫這樣的:

public function get($page) 
{ 
    // do something 
} 

我的語言中間件:

public function handle($request, Closure $next) 
{ 
    // URL language 
    $urllang = $request->segment(1); 

    if ($request->session()->has("lang")){ 
     $sessionLang = $request->session()->get('lang'); 


     // if requested url hasn't language 
     if ($urllang == NULL) { 
      $urllang = $sessionLang; 
      return redirect('/' . $sessionLang); 
     } 

     // if user change the language 
     elseif ($urllang != NULL && $urllang != $sessionLang) { 
      $request->session()->put('lang' , $urllang); 
     } 
    } 
    else{ 
     // if there is no session lang and no url lang 
     // get app main lang from config file 
     // Put session and redirect 
     if ($urllang == NULL) { 
      $request->session()->put('lang' , config('app.locale')); 
      return redirect('/' . config('app.locale')); 
     } 
     // if there is no session 
     // Only put session 
     else{ 
      $request->session()->put('lang' , $urllang); 
     } 
    } 


    // get requested language id from database 
    $lang = Lang::select("id" , "short" , "name" , "title" , "keywords" , "description" , "copyrights" , "site_name")->where(['short' => $urllang , 'active' => 1 ])->first(); 
    // if requested language is not exist 
    if (!$lang) { 
     $request->session()->put('lang' , config('app.locale')); 
     abort(404); 
    }else{ 
     Lang::set($lang); 
     return $next($request); 
    } 

} 

感謝。

+0

你能描述一下你的參數$ page和$ lang嗎? 傳遞兩個變量有什麼問題? –

+0

'但我只想使用頁面參數 - 什麼可以防止忽略$ lang?或者你想讓lang成爲可選參數? – Anton

+0

Lang參數將是類似於(en - es ...)的語言代碼 頁面參數將成爲url中的頁面標題(about-us,類似於...) –

回答

0

終於讓我找到了最好的解決方案 只是我加入到我的語言中間件此行

$request->route()->forgetParameter('lang'); 

我要求它從請求變量中刪除lang參數。

希望能幫到你。

0

您可以選擇退出使用的參數作爲參數和要求只得到必要的:

public function get(Request $request) 
{ 
    $lang = $request->route('lang'); 
    $page = $request->route('page'); 
    // ... 
}