Из системы auth и register по умолчанию, которая поставляется с Laravel 5.2, просто сделал простой вид, который может быть приветственной страницей, и включить формы регистрации и регистрации. На данный момент, если какая-либо кнопка нажата, проверка проверяет и находит ошибки в обеих формах и выделяется все из них, которые требуются. Итак, каково наилучшее решение включить их и, возможно, отдельную проверку для каждого?
Я попытался изменить систему входа по умолчанию, чтобы отличаться от имен ввода формы регистра, но я думаю, что существует цепочка из-за проверки и добавления входных значений в базу данных.
<div class="form-group{{ $errors->has('login_email') ? ' has-error' : '' }}"> <label class="col-md-4 control-label">E-Mail Address</label> <div class="col-md-6"> <input type="email" class="form-control" name="login_email" value="{{ old('login_email') }}"> @if ($errors->has('login_email')) <span class="help-block"> <strong>{{ $errors->first('login_email') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('login_password') ? ' has-error' : '' }}"> <label class="col-md-4 control-label">Password</label> <div class="col-md-6"> <input type="password" class="form-control" name="login_password"> @if ($errors->has('login_password')) <span class="help-block"> <strong>{{ $errors->first('login_password') }}</strong> </span> @endif </div> </div>
Как видно, просто изменили имена ввода электронной почты и пароля с «email» на «login_email» и «password» на «login_password»,
Любые быстрые и эффективные решения / идеи приветствуются
Вместо изменения имен ввода, просто переопределите функцию признака и вызовите ее из функции overriden …
При этом мы можем сохранить значение сеанса, которое сообщит нам, откуда попытка аутентификации поступает из регистрационной формы или регистрационной формы!
use AuthenticatesUsers, RegistersUsers { AuthenticatesUsers::redirectPath insteadof RegistersUsers; AuthenticatesUsers::getGuard insteadof RegistersUsers; login as traitLogin; register as traitRegister; } // Override trait function and call it from the overriden function public function login(Request $request) { //Set session as 'login' Session::put('last_auth_attempt', 'login'); //The trait is not a class. You can't access its members directly. return $this->traitLogin($request); } public function register(Request $request) { //Set session as 'register' Session::put('last_auth_attempt', 'register'); //The trait is not a class. You can't access its members directly. return $this->traitRegister($request); }
и в вашем файле View.blade просто проверьте свои ошибки с помощью значения Session …
<div class="form-group{{ $errors->has('email') && Session::get('last_auth_attempt') == 'login' ? ' has-error' : '' }}"> <label class="col-md-4 control-label">E-Mail</label> <div class="col-md-6"> <input type="email" class="form-control" name="email" value="{{ old('email') }}"> @if ($errors->has('email') && Session::get('last_auth_attempt') == 'login') <span class="help-block"> <strong>{{ $errors->first('email') }}</strong> </span> @endif </div> </div>
С помощью этого вы можете проверить, нажата ли кнопка от кнопки входа в систему ou
В вашем AuthController установите это в конструкторе.
/** * Create a new authentication controller instance. * * @return void */ public function __construct(Request $request) { $this->middleware($this->guestMiddleware(), ['except' => 'logout']); Session::put('last_auth_attempt', $request->auth_attempt); }
Вы должны отправить скрытый ввод значения «auth_attempt». Таким образом, вы можете знать, что вы пытались выполнить либо для входа в систему, либо для регистрации.
Форма регистрации:
... <input type="hidden" name="auth_attempt" value="register"> ...
Форма входа:
... <input type="hidden" name="auth_attempt" value="login"> ...
Затем в ваших валидациях или там, где вам это нужно, вы можете использовать следующее, чтобы проверить, были ли вы пытались войти или зарегистрироваться.
<div class="form-group{{ $errors->has('lastName') && Session::get('last_auth_attempt') == 'register' ? ' has-error' : '' }}"> <label for="name">Last Name</label> <input id="lastName" type="text" class="form-control" name="lastName" value="{{ old('lastName') }}"> @if ($errors->has('lastName') && Session::get('last_auth_attempt') == 'register') <span class="help-block"> <strong>{{ $errors->first('lastName') }}</strong> </span> @endif </div>
Я понял: в атрибуте AuthenticatesUsers измените каждое «письмо» на «login_email» и «password» на «login_password». Кроме того, попытка входа в систему будет использоваться в качестве ключей массива учетных данных, поэтому отредактируйте эту функцию, чтобы:
protected function getCredentials(Request $request) { $credentials = $request->only($this->loginUsername(), 'login_password'); $credentials['email'] = $credentials['login_email']; $credentials['password'] = $credentials['login_password']; unset($credentials['login_email']); unset($credentials['login_password']); return $credentials; //return $request->only($this->loginUsername(), 'login_password'); }
неprotected function getCredentials(Request $request) { $credentials = $request->only($this->loginUsername(), 'login_password'); $credentials['email'] = $credentials['login_email']; $credentials['password'] = $credentials['login_password']; unset($credentials['login_email']); unset($credentials['login_password']); return $credentials; //return $request->only($this->loginUsername(), 'login_password'); }
неprotected function getCredentials(Request $request) { $credentials = $request->only($this->loginUsername(), 'login_password'); $credentials['email'] = $credentials['login_email']; $credentials['password'] = $credentials['login_password']; unset($credentials['login_email']); unset($credentials['login_password']); return $credentials; //return $request->only($this->loginUsername(), 'login_password'); }
Теперь все работает нормально.