2017-06-04 14 views
1

に、コントローラへのルート・ファイル内の指定されたパラメータを渡すと、私はこの書かれているファイル:laravelルートで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を記述できますか? 2つの変数を渡す際に何が問題になりますか? –

+0

'しかし、私はページパラメータのみを使用します。' - $ langを無視するのは何ですか?あるいは、langをオプションのパラメータにしたいですか? – Anton

+0

Langパラメータは次のような言語コードになります ページパラメータはURLのページタイトルになります(about-us、something-like-this ...) –

答えて

0

は、最後に私はちょうど私がこのラインに私の言語ミドルウェア

を追加 最善の解決策を見つけました
$request->route()->forgetParameter('lang'); 

リクエスト変数からlangパラメータを削除するようにお願いしました。

お手数ですが、

0

あなたはパラメータとして引数を使用してのオプトアウトとリクエストからのみ、必要なものを得ることができます。

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