如何从控制器方法重定向到路由

时间:2017-08-01 14:21:21

标签: php laravel laravel-5 laravel-5.4

我在我的控制器中定义了一个方法,首先检索输入,如果我的数据库中有电子邮件字段,我想返回一个视图。但是,如果电子邮件字段不存在,我想重定向到另一条路线。我也希望将输入传递给该路线。

为了更好地理解我的意思,我的控制器的代码如下:

    public function index(Request $request) {

    $credentials = $request->all();

    if (\App\User::where('email','=',$credentials['email'])->exists()){

        //if they are registered, return VIEW called welcome, with inputs

        return view('welcome', $credentials);

    }
    else{//If the user is not in the database, redirect to '/profile' route,
         //but also send their data

        return redirect('profile', $credentials);

    }

我的web.php如下:

Route::post('/profile', function() {
     $m = Request::only('email'); //I only need the email
     return view('profile', $m);
});

但是,此逻辑失败并出现错误:' HTTP状态代码' 1'未定义'。 反正这样做了吗? (即从我的控制器方法转到另一条路线?)

4 个答案:

答案 0 :(得分:5)

您可以使用redirect()方法。

return redirect()->route('route.name')->with(['email'=> 'abc@xys.com']);

由于with()redirect()一起使用会添加'电子邮件'到会话(非请求)。然后使用以下命令检索电子邮件:

request()->session()->get('email')
//Or
session('email')

答案 1 :(得分:2)

虽然@JithinJose问题给出了答案,但我将这个作为答案添加到那些将来考虑这个问题的人,以及谁不想在会议中处理这样的事情:

不推荐的方法是直接从这个控制器方法调用控制器,并将所需的变量传递给它:

:meeting1

如果另一个控制器方法存在于同一个类中,这将是可以的,否则你只需要获得所需的方法并重复使用它。

建议的最佳方式如果你想避免会话Redirect to controller action,即:

$request->setMethod('GET'); //set the Request method
$request->merge(['email' => $email]); //include the request param
$this->index($request)); //call the function

我希望它有用:)

答案 2 :(得分:1)

您需要定义您想要redirect()

的路线
return redirect()->route('profile')->with('credentials', $credentials);

with选项将数据闪烁到会话,可以像直接传递给视图一样进行访问。

有关session和闪烁数据的更多信息,请访问here

有关重定向后闪烁数据的信息,请here

在您的情况下,您可以使用:

return redirect()->route('profile')->with('email', $credentials['email']);

在您的视图中,您可以像以下一样使用它:

@if(session()->has('email')
    We have the email of the user: {{ session('email') }}
@endif

答案 3 :(得分:0)

请更改您的观看路径,如:

return view('welcome', compact(credentials));

return redirect()->route('profile')->with('credentials',$credentials);