将路径文件中的指定参数传递给laravel

时间:2017-06-04 04:05:18

标签: php laravel controller routing parameter-passing

在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);
    }

}

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以选择不使用参数作为参数,只从请求中获取必要的参数:

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

答案 1 :(得分:0)

最后,我找到了最佳解决方案 我刚加入语言中间件这一行

$request->route()->forgetParameter('lang');

我要求它从请求变量中删除lang参数。

希望能帮到你。

相关问题