使用Laravel Auth时如何捕获QueryException错误

问题描述 投票:0回答:2

我测试了我的应用程序以禁止重复电子邮件。它工作正常,但我无法捕获错误,或者只要发现重复,它就不会在表单页面中显示请求错误。

SQLSTATE [23000]:完整性约束违规:1062重复条目'admins_email_unique'重复输入'[email protected]'

我已经尝试重写RegisterController,但仍然无法找到首先获取错误的位置。

protected function create(array $data)
{
    try{
        return Admin::create([
        'role_id' => $data['role_id'],
        'username' => $data['username'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
    }

    catch(Illuminate\Database\QueryException $e)
    {
         echo($e);
    }
}

我目前的RegisterController

<?php

namespace App\Http\Controllers\AdminAuth;

use App\Admin;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

use App\Traits\RoleTrait;

 class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/

use RegistersUsers;
use RoleTrait;

/**
 * Where to redirect users after login / registration.
 *
 * @var string
 */
protected $redirectTo = '/admin/home';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('admin.guest');
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
        return Admin::create([
        'role_id' => $data['role_id'],
        'username' => $data['username'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);

}


/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'role_id' => 'required|string|max:4',
        'username' => 'required|string|unique:users|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

/**
 * Show the application registration form.
 *
 * @return \Illuminate\Http\Response
 */
public function showRegistrationForm()
{
    $mgaAdminRoleNames = $this->getAdminRoleNames();
    return view('admin.auth.register')->with('adminRoleNames',$mgaAdminRoleNames);
}
/**
 * Get the guard to be used during registration.
 *
 * @return \Illuminate\Contracts\Auth\StatefulGuard
 */
protected function guard()
{
    return Auth::guard('admin');
}

我已经输入了admin \ auth \ register.blade.php

@if ($errors->has('email'))
         <span class="invalidMessage">
            <strong>{{ $errors->first('email') }}</strong>
        </span>
@endif 

预期的解决方案是这两个: 1)在表单页面中显示错误,如下所示:

Image Here

2)或者捕获QueryException并直接回显错误

laravel
2个回答
0
投票

使用验证重复输入我希望这个链接将有用laravel recommended link


0
投票

我在检查验证器时找到了答案。所以,如果有人遇到这个问题。这是解决方案:

protected function validator(array $data)
{
    return Validator::make($data, [
        'role_id' => 'required|string|max:4',
        'username' => 'required|string|unique:admins|max:255',
        'email' => 'required|string|email|max:255|unique:admins',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

注意“唯一”属性。我将其从“用户”更改为“管理员”。 我认为“admins”这个词来自config \ auth.php目录,你可以在其中设置你的警卫和提供者的东西。

© www.soinside.com 2019 - 2024. All rights reserved.