将路由文件中的指定参数传递给laravel中的控制器 [英] Passing specified parameters in route file to the controller in laravel

查看:150
本文介绍了将路由文件中的指定参数传递给laravel中的控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在laravel路由文件中,我这样写:

In laravel routes file I have written this :

Route::get('/{lang}/{page}', 'PagesController@get' )->where('lang' , $langPattern );

在页面控制器中,我这样写:

and in pages controller I wrote this :

public function get($lang,$page)
{
     // do something
}

但是我只想使用页面参数

But I want only to use page parameter

我创建了一个中间件来选择语言,并且控制器中不需要$ lang

I created a middleware to select language and there is no need for $lang in controllers

如何删除它?

我可以这样写吗:

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

}

谢谢.

推荐答案

最后,我找到了最佳解决方案 只是我在此行中添加了语言中间件

Finally i found the best solution Just i added to my language middleware this line

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

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

I asked it to remove lang parameter from request variable .

希望能为您提供帮助.

这篇关于将路由文件中的指定参数传递给laravel中的控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆