に、コントローラへのルート・ファイル内の指定されたパラメータを渡すと、私はこの書かれているファイル: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);
}
}
おかげ
は、私はこのように書くことができます。
パラメータ$ pageと$ langを記述できますか? 2つの変数を渡す際に何が問題になりますか? –
'しかし、私はページパラメータのみを使用します。' - $ langを無視するのは何ですか?あるいは、langをオプションのパラメータにしたいですか? – Anton
Langパラメータは次のような言語コードになります ページパラメータはURLのページタイトルになります(about-us、something-like-this ...) –