Laravel 5.2 redirect()->back()->withErrors $errors 为空

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/37170136/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 13:46:36  来源:igfitidea点击:

Laravel 5.2 redirect()->back()->withErrors $errors is empty

phplaravelredirect

提问by Andres Rosado

I'm trying to apply a validation in my auth form. Everything works well, until I go into my return $this->sendFailedLoginResponse($request);, where the redirect()->back()->withErrors() isn't storing the error in the MessageBag (making my $errors variable empty for my view).

laravel.blade.php

我正在尝试在我的身份验证表单中应用验证。一切正常,直到我进入我的 return $this->sendFailedLoginResponse($request);,其中 redirect()->back()->withErrors() 没有将错误存储在 MessageBag 中(使我的 $errors我认为变量为空)。

laravel.blade.php

<!-- BEGIN LOGIN FORM -->
        <form class="login-form" action="{{ url('/login') }}" method="post">
            {!! csrf_field() !!}
            <h3 class="form-title font-green">Iniciar sesión</h3>
                @if (count($errors) > 0) // Here is where i check and my $errors variable is empty
                    @foreach ($errors->all() as $error)
                        <div class="alert alert-danger">
                            <button class="close" data-close="alert"></button>
                            <span>{{ $error }}</span>
                        </div>
                    @endforeach
                @endif
            <div class="form-group">
                <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                <label class="control-label visible-ie8 visible-ie9">Username</label>
                <input class="form-control form-control-solid placeholder-no-fix" type="text" autocomplete="on" placeholder="Usuario" name="email" value="{{ (isset($email) ? $email : '' ) }}" /> </div>
            <div class="form-group">
                <label class="control-label visible-ie8 visible-ie9">Password</label>
                <input class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="Contrase?a" name="password" /> </div>
            <div class="form-actions">
                <button type="submit" class="btn green uppercase">Iniciar sesión</button>
            </div>
        </form>
        <!-- END LOGIN FORM -->

AuthenticatesUsers.php

AuthenticatesUsers.php

public function login(Request $request)
{
    $this->validateLogin($request);

    // If the class is using the ThrottlesLogins trait, we can automatically throttle
    // the login attempts for this application. We'll key this by the username and
    // the IP address of the client making these requests into this application.
    $throttles = $this->isUsingThrottlesLoginsTrait();

    if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) {
        $this->fireLockoutEvent($request);

        return $this->sendLockoutResponse($request);
    }

    $credentials = $this->getCredentials($request);

    if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
        return $this->handleUserWasAuthenticated($request, $throttles);
    }

    // If the login attempt was unsuccessful we will increment the number of attempts
    // to login and redirect the user back to the login form. Of course, when this
    // user surpasses their maximum number of attempts they will get locked out.
    if ($throttles && ! $lockedOut) {
        $this->incrementLoginAttempts($request);
    }

    return $this->sendFailedLoginResponse($request);
}

/**
 * Validate the user login request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->loginUsername() => 'required', 'password' => 'required',
    ]);
}

/**
 * Get the failed login response instance.
 *
 * @param \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
protected function sendFailedLoginResponse(Request $request)
{
    return redirect()->back()
        ->withInput($request->only($this->loginUsername(), 'remember'))
        ->withErrors([
            $this->loginUsername() => $this->getFailedLoginMessage(),
        ]);
}

/**
 * Get the failed login message.
 *
 * @return string
 */
protected function getFailedLoginMessage()
{
    return Lang::has('auth.failed')
            ? Lang::get('auth.failed')
            : 'These credentials do not match our records.';
}

回答by Niket Joshi

Hello You have have to write as below redirect()

你好你必须写如下redirect()

 return redirect()->back()->with('status-keyword', 'error message');

and on front end you get that message using

在前端,您使用

@if (session('error'))
    <div class="alert alert-danger text-center msg" id="error">
    <strong>{{ session('error') }}</strong>
    </div>
@endif

I hope that this will fruitful to you. Thank You.

我希望这会对你有所收获。谢谢你。