从其他函数调用Redirect :: back()不起作用。 Laravel 4

时间:2014-12-06 20:38:38

标签: redirect laravel

我是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也是如此,仍然无效。

坦克。

2 个答案:

答案 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()方法中,它应该可以立即使用。