Доброго времени суток. За ранее спасибо за потраченное время. Решил реализовать собственную авторизацию, всё шло отлично, но! Каким образом я могу установить собственную ошибку? Вот FormRequest валидации: PHP: <?php namespace App\Http\Requests; use Illuminate\Contracts\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; class AuthRequest extends FormRequest { protected $errorBag = 'login'; public function rules() { return [ 'login' => 'required|min:6|max:16|exists:users', 'password' => 'required|min:6|max:32' ]; } public function messages() { return [ 'login.required' => 'Логин не может быть пустым!', 'login.min' => 'Логин не может быть менее 6 символов!', 'login.max' => 'Логин не может быть более 16 символов!', 'login.exists' => 'Логин / Пароль введены неверно', 'password.required' => 'Пароль не может быть пустым!', 'password.min' => 'Пароль не может быть менее 6 символов!', 'password.max' => 'Пароль не может быть более 32 символов!' ]; } } Вот код модели: PHP: <?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $guarded = [ 'register_ip', 'last_ip' ]; public static function login($request) { $user = self::where('login', $request->login)->first(); if($user->password != hash('sha256', $request->password)) return redirect('/'); print 1;die; } public function getPasswordAttribute($value) { return hash('sha256', $value); } } т.е. если пароль не совпадает, нужно как-то создать ошибку и вывести её на фронте. Подскажите пожалуйста, как можно это сделать. Вот так работает вывод ошибок на клиенте: HTML: <div class="mdl-textfield mdl-js-textfield"> <label for = "login" class = "mdl-textfield__label"> Логин </label> <input type = "text" name = "login" id = "login" placeholder = "Введите логин аккаунта" value = "{{ old('login') }}" class = "mdl-textfield__input" required autofocus > @if ($errors->login->has('login')) <span class="mdl-textfield__error" style = "visibility: visible">{{ $errors->login->first('login') }}</span> @endif </div> Контроллер, если вдруг вопросы почему там модель PHP: namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; use App\Http\Requests\AuthRequest; class UserController extends Controller { public function actionLogin(AuthRequest $request) { return User::login($request); } } Если можно как-то легко реализовать собственный валидатор на совпадение пароля из бд как в yii2, было бы неплохо сделать это прямо в formrequest, а не в модели, спасибо.
Для решения проблемы я создал отдельный валидатор. PHP: class IsPasswordRegistered implements Rule { /** * Create a new rule instance. * * @return void */ public function __construct() { // } /** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { $password = User::where('password', hash('sha256', $value))->first(); return $password !== null ? true : false; } /** * Get the validation error message. * * @return string */ public function message() { return 'Логин / Пароль введены неверно'; } } Вот метод с правилами валидации. PHP: public function rules() { return [ 'login' => [ 'required', 'min:6', 'max:16', 'exists:users' ], 'password' => [ 'required', 'min:6', 'max:32', new IsPasswordRegistered ] ]; }