Laravel 5.2 - 未显示验证错误

Laravel 5.2 - Validation errors are not getting displayed

我正在尝试验证 Laravel 5.2 中的 login/signup 系统。

我使用 welcome.blade.php 作为索引页面,其中包含两种用于注册和登录的表单

我的 UserController.php 是这样设置的:

namespace authme\Http\Controllers;

use Illuminate\Http\Request;
use authme\User;
use Illuminate\Support\Facades\Auth;

class UserController extends Controller
{
    public function getDashboard()
    {
        return view('dashboard');
    }
    public function doSignUp(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email|unique:users',
            'first_name' => 'required|max:120',
            'password' => 'required|min:6'
        ]);

        $email = $request['email'];
        $password = bcrypt($request['password']);
        $first_name = $request['first_name'];
        $last_name = $request['last_name'];
        $location = $request['location'];
        $phone = $request['phone'];

        $user = new User();
        $user->email = $email;
        $user->password = $password;
        $user->firstname = $first_name;
        $user->lastname = $last_name;
        $user->location = $location;
        $user->phone = $phone;

        $user->save();

        Auth::login($user);

        return redirect()->route('dashboard');

    }

    public function doSignIn(Request $request)
    {
        $this->validate($request, [
            'email' => 'required',
            'password' => 'required'
        ]);

        if(Auth::attempt(['email' => $request['email'], 'password' => $request['password']])){
            return redirect()->route('dashboard');
        }
        return redirect()->back();
    }
}

为了显示 signup/login 期间的错误,在我的视图文件 (welcome.blade.php) 中,我包含了:

@if(count($errors) > 0)
    <div class="row">
            <div class="alert alert-danger">
                <ul>
                    @foreach($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
    </div>
@endif

路由设置如下:

Route::group(['middleware' => ['web']], function() {

Route::get('/', function () {
    return view('welcome');
});

Route::post('/signup', [
    'uses'  => 'UserController@doSignUp',
    'as' => 'signup'
]);

Route::post('/signin', [
    'uses'  => 'UserController@doSignIn',
    'as' => 'signin'
]);

Route::get('/dashboard', [
    'uses' => 'UserController@getDashboard',
    'as' => 'dashboard'
]);
});

输入正确的详细信息时,表格工作正常。但是,当我输入不正确的数据时:

但是,我在我的代码中找不到任何可能的语法错误。有没有逻辑错误?

PS:

  1. 我没有编辑或修改 App\Exceptions\Handler
  2. None 两个问题的答案 and here 解决了我的问题

如果您使用的 Laravel 版本高于或等于 5.2.25,您不再需要将路由放在 web 中间件中。现在自动应用。

将您的路由放在 routes.php 中的 web 中间件中实际上会导致问题。

已解释

您还可以使用以下代码来显示使用无效凭据登录的错误。

public function doSignIn(Request $request)
{
    $rules = array(
        'email'    => 'required',
        'password' => 'required'
    );
    $validator = Validator::make($request->all(), $rules);
    if ($validator->fails()){
            return redirect('welcome')
            ->withErrors($validator)
            ->withInput();
    }else{
        if(Auth::attempt(['email' => $request['email'], 'password' => $request['password']])){
            return redirect()->route('dashboard');
        }
    }
}

在我看来,您的验证错误消息没有保存到会话中。看看这个。

https://github.com/laravel/framework/issues/12022