我在我的控制器中定义了一个方法,首先检索输入,如果我的数据库中有电子邮件字段,我想返回一个视图。但是,如果电子邮件字段不存在,我想重定向到另一条路线。我也希望将输入传递给该路线。
为了更好地理解我的意思,我的控制器的代码如下:
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'未定义'。 反正这样做了吗? (即从我的控制器方法转到另一条路线?)
答案 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);