【问题标题】:How to pass variables needed in view through redirect route in laravel?如何通过laravel中的重定向路由传递视图所需的变量?
【发布时间】:2018-10-20 08:35:42
【问题描述】:

我修改了controller 中的默认auth 方法,该方法在自定义login 之后将用户重定向到set_password 页面。问题是我可以很好地将它重定向到所需的页面,但我需要同时传递两个通过查询数据库返回的动态变量,我无法通过重定向传递。

我修改的controller方法如下:-

protected function authenticated(Request $request, $user)
{
    $activated_up = User::where('id_user',Auth::user()->id_user)
                    ->where(function($query) {
                    $query->where('activated_up', '=', '1')
                    ->orWhere('activated_up', '=','0');
                })
                    ->get(['activated_up']);   
    $showuser = UserProfile::where('id_user',Auth::user()->id_user)->first();

    return redirect()->route('set_password',['activated_up' => $activated_up, 'showuser' => $showuser]); 
}

我知道要将变量传递给view,我需要使用compact 方法,如下所示:- return view('set_password', compact('activated_up', 'showuser'); 但不能通过重定向来完成。

我重定向的方式意味着我在controller方法中将参数传递给route,但我需要将变量传递给重定向的view而不是参数。如何实现?

【问题讨论】:

    标签: php laravel redirect routes laravel-5.5


    【解决方案1】:
     protected function authenticated(Request $request, $user)
    {
    $activated_up = User::where('id_user',Auth::user()->id_user)
                    ->where(function($query) {
                    $query->where('activated_up', '=', '1')
                    ->orWhere('activated_up', '=','0');
                })
                    ->get(['activated_up']);   
    $showuser = UserProfile::where('id_user',Auth::user()->id_user)->first();
    
    return redirect()->route('set_password',['activated_up' => $activated_up, 'showuser' => $showuser]); 
    }
    

    你可以使用与

    return redirect()->route('set_password')->with('data', ['some kind of 
    data']);
    

    在你看来

     @if (session::has('data'))
       The data is {{ session::get('data') }}
     @endif
    

    【讨论】:

    • 所以我需要这样做:return redirect()->route('set_password')->with('activated_up', 'showuser', ['$activated_up', '$showuser']);
    • 所以我需要这样做:return redirect()->route('set_password')->with('activated_up'=>$activated_up,'showuser'=>$showuser) ; @parthu_panther
    • 它给出了这个错误:- Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ',' or ')'。我猜=>在这里无效。
    • return redirect()->route('set_password')->with(['activated_up'=>$activated_up,'showuser'=>$showuser]);
    • 解析错误已解决,但出现新错误:-` 未找到“会话”类(查看:C:\xamp\htdocs\student\resources\views\set_password.blade.php)`
    【解决方案2】:

    按照Kuldeep Mishra 的答案中的描述进行了尝试,但无法实现,无论如何我找到了一种解决方法来实现我想要的输出。我所做的是将我的 authenticated 方法更改为:-

     protected function authenticated(Request $request, $user)
    {   
        return redirect()->route('set_password');   
    }
    

    我只从上述方法重定向到set_password 路由,并在控制器中创建了新方法来显示带有压缩变量的视图,如下所示:-

    public function setPasswordForm(Request $request)
    {
        $activated_up = User::where('id_user',Auth::user()->id_user)
                        ->where(function($query) {
                        $query->where('activated_up', '=', '1')
                        ->orWhere('activated_up', '=','0');
                    })
                        ->get(['activated_up']);   
        $showuser = UserProfile::where('id_user',Auth::user()->id_user)->first();
        return view('set_password', compact('activated_up', 'showuser'));
    }
    

    还有一个小改动路由web.php文件:-

    Route::get('/set_password', 'Controller@setPasswordForm')->name('set_password');
    

    所以最后我能够重定向到所需的页面,所需的视图加载了动态变量。

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 2015-06-05
      • 2016-09-25
      • 2017-08-07
      • 2023-03-07
      • 2021-08-26
      • 2017-05-27
      • 2015-03-16
      • 1970-01-01
      相关资源
      最近更新 更多