2016-01-30 2 views
3

Login and Register forms on the same pageLaravel Войти и зарегистрировать формы на той же странице в Laravel 5.2

От умолчанию AUTH и зарегистрировать кинозал, который поставляется с 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> 

Как можно видеть, только изменил имена электронной почты и ввода пароля от «электронной почты» до «login_email» и от «пароль» до «login_password»

Любые быстрые и эффективные решения/идеи welcome

+0

скажите, изменили ли вы имена в 'Controller @ Method'? –

+0

Да, я тоже скрепил их, а затем я получил ошибку от SQL.Кажется, что сравнение входных имен с столбцами из таблицы Users, но я думаю, что это хорошая идея, чтобы отредактировать ядро ​​метода try(), поскольку в следующем коде массив содержит эти входные имена: if (Auth :: guard ($ this-> getGuard()) -> попытка ($ credentials, $ request-> has ('remember'))) { return $ this-> handleUserWasAuthenticated ($ request, $ throttles); } – Spidey

ответ

6

Вместо того чтобы изменять название входов, просто Override черты функции и вызывать его из перекрываться функций ...

С этим сделано, мы можем хранить значение сеанса, скажите нам, где попытка аутентификации исходит от входа или регистрационную форму!

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> 

При этом вы можете проверить, если кнопка нажата от кнопки Логин оу регистр

+1

Почему бы не использовать session() -> flash()? –

0

Я понял: В атрибуте 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'); 
} 

Теперь все работает отлично.

+0

Вы должны скопировать этот метод в свой AuthController и отредактировать его там (чтобы переопределить его), но ваш код работает как шарм :) –

+0

@Spidey, можете ли вы поделиться полным кодом, пожалуйста? Я имею в виду, что вы сделали в режиме просмотра и в контроллерах и маршрутах? –

+0

@XahedKamal. Код слишком длинный, чтобы добавить его здесь. Я добавил к следующей ссылке, и ПАРОЛЬ: laravel http://textcrypt.com/y8zviqqP9z – Spidey

1

В вашем 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> 
Смежные вопросы