在laravel routes文件中,我写了这个:
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);
}
}
谢谢。
答案 0 :(得分:0)
您可以选择不使用参数作为参数,只从请求中获取必要的参数:
public function get(Request $request)
{
$lang = $request->route('lang');
$page = $request->route('page');
// ...
}
答案 1 :(得分:0)
最后,我找到了最佳解决方案 我刚加入语言中间件这一行
$request->route()->forgetParameter('lang');
我要求它从请求变量中删除lang参数。
希望能帮到你。