[英]Passing specified parameters in route file to the controller in laravel
在Laravel路由文件中,我這樣寫:
Route::get('/{lang}/{page}', 'PagesController@get' )->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);
}
}
謝謝 。
您可以選擇不使用參數作為參數,並從請求中僅獲取必要的參數:
public function get(Request $request)
{
$lang = $request->route('lang');
$page = $request->route('page');
// ...
}
終於讓我找到了最好的解決辦法只是我加入到我的語言中間件這一行
$request->route()->forgetParameter('lang');
我要求它從request變量中刪除lang參數。
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.