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);
}
}
感謝。
你能描述一下你的參數$ page和$ lang嗎? 傳遞兩個變量有什麼問題? –
'但我只想使用頁面參數 - 什麼可以防止忽略$ lang?或者你想讓lang成爲可選參數? – Anton
Lang參數將是類似於(en - es ...)的語言代碼 頁面參數將成爲url中的頁面標題(about-us,類似於...) –