我是Laravel的新手,有时很难理解发生的事情。
我有一个验证表单的代码。如果我在一个函数中使用它,它可以正常工作,但如果从另一个函数调用它,则不能使用Redirect:back()。我想重用所有表单的代码,但不能重构。
这是代码(不工作,不重定向,如果验证失败则继续执行代码)
private function formValidation($data ,$rules ,$error_name = 'user', $message = 'Hay errores en el formulario')
{
$validator = Validator::make($data, $rules);
if ($validator->fails())
{
Session::Flash('message' , $message);
return Redirect::back()->withErrors($validator,$error_name)->withInput();
}
else
return $validator;
}
public function loginPost()
{
$this->formValidation(Input::all(),User::$rules_login);
..........
此代码工作正常,如果验证失败则会重定向:
public function loginPost()
{
$validator = Validator::make(Input::all(),User::$rules_login);
if ($validator->fails())
{
Session::Flash('message' , 'Hay errores en el formulario');
return Redirect::back()->withErrors($validator,'user')->withInput();
}
.............
有人可以帮助我吗?我真的想从另一个类中调用它,但是在看到它不起作用之后我会调用一个私有函数。
我尝试调用Redirect:to('login',$ data,$ rules ...)和Redirect :: route也是如此,仍然无效。
坦克。
答案 0 :(得分:1)
这有效,所以我可以重构;)
private function formValidation($data ,$rules , $message = 'Hay errores en el formulario')
{
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
MyHelpers::sendSessionFlashMessages(array('message' => $message)); // Send a Session::flash with css information
return Redirect::back()->withErrors($validator, 'user')->withInput();
}
return $validator;
}
public function loginPost()
{
if (get_class($response = $this->formValidation(Input::all(),User::$rules_login)){ === 'Illuminate\Http\RedirectResponse')
return $response;
}
...................... rest of the function
答案 1 :(得分:0)
Laravel使用loginPost()
方法的返回值来确定对浏览器的响应。但是,该方法不会返回重定向 - formValidation()
。所以会发生的是formValidation
返回重定向,然后它会被完全忽略。如果您将重定向放在loginPost()
方法中,它应该可以立即使用。