【问题标题】:Laravel $errors not dispalying in bladeLaravel $errors 未显示在刀片​​中
【发布时间】:2019-06-28 12:10:08
【问题描述】:

我在刀片中的登录表单验证但不会显示错误,失败时返回登录页面并显示空白条目,我该如何处理?

最初我的路由是在 api.php 中定义的并且遇到了同样的问题,所以我将其更改为 web.php 并且仍然相同。 value="{{old('name')}}" 也不起作用。

这是我在刀片中写的表格

<h5>Login Your Account</h5>    
        <!-- FORM -->
        @if ($errors->any())
          <div class="alert alert-danger">
              <ul>
                  @foreach ($errors->all() as $error)
                      <li>{{ $error }}</li>
                  @endforeach
              </ul>
          </div>
      @endif
        <form method="POST" action="/login" >
        {{ csrf_field() }}
              <div class="form-group">
                  <label for="name">Name</label>
                  <input type="text" id="name" class="form-control" name="name" placeholder="" value="{{old('name')}}">
                  @if ($errors->has('name')) <p class="help-block">{{ $errors->first('name') }}</p> @endif
              </div>


              <div class="form-group ">
                  <label for="password">Password</label>
                  <input type="password" id="password" class="form-control" name="password" value="{{old('password')}}">
                  @if ($errors->has('password')) <p class="help-block">{{ $errors->first('password') }}</p> @endif
              </div>



              <li class="col-sm-12 text-left">
              <button type="submit" class="btn-round">Login</button>
            </li>

          </form>

这是我的控制器登录功能

public function login(Request $request){

    $validator= Validator::make($request->all(),
    ['name'=> "bail|required|max:50|exists:users",
    'password' => 'required|min:6|exists:users,password'
]
);

if ($validator->fails()){
    return redirect()->back()->withInput()->withError($validator);
}
else{
    if (Auth::attempt(['name'=> $request->name, 'password'=>$request->password])){
    return redirect('/home');
    }
}

这是我的 web.php 路由

Route::get('/', function () {
return view('home');
});
Route::post('/login','API\userController@login');

还有我的 kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array
 */
protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];

/**
 * The priority-sorted list of middleware.
 *
 * This forces non-global middleware to always be in the given order.
 *
 * @var array
 */
protected $middlewarePriority = [
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\Authenticate::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \Illuminate\Auth\Middleware\Authorize::class,
];
}

如果验证成功,它会重定向到我指定的路由,但一旦失败,它会直接返回登录页面,不会显示错误

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    Laravel 的 RedirectResponse 类有方法 withErrors() 发送验证器消息包,当你调用 withError() 时。

    从 Laravel 的 RedirectResponse.php 看到这个

    /**
         * Flash a container of errors to the session.
         *
         * @param  \Illuminate\Contracts\Support\MessageProvider|array|string  $provider
         * @param  string  $key
         * @return $this
         */
        public function withErrors($provider, $key = 'default')
        {
            $value = $this->parseErrors($provider);
    
            $this->session->flash(
                'errors', $this->session->get('errors', new ViewErrorBag)->put($key, $value)
            );
    
            return $this;
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2017-07-29
      • 2016-06-26
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多