Laravel在Laravel 5.2

时间:2016-01-30 01:49:44

标签: php forms laravel login

Login and Register forms on the same page

来自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>

可以看出,只是更改了电子邮件和电子邮件中的电子邮件和密码输入名称。到&#39; login_email&#39;并从密码&#39;到&#39; login_password&#39;

欢迎任何快速有效的解决方案/想法

4 个答案:

答案 0 :(得分:6)

不要改变输入名称,只需覆盖特征函数并从覆盖函数中调用它......

完成后,我们可以存储一个会话值,告诉我们auth尝试来自登录或注册表单的位置!

    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文件中使用您的会话值检查您的错误...

<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注册按钮

答案 1 :(得分:1)

我想通了: 在AuthenticatesUsers trait中,将每个'email'更改为'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');
}

现在一切正常。

答案 2 :(得分: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>

答案 3 :(得分:1)

另一个快速但可能不那么优雅的解决方案是在登录表单中插入隐藏字段

<input type="hidden" name="loginform" value="1">

然后只需检查两种形式的电子邮件和密码错误。

在登录表格中,例如:

@if($errors->has('password') && old('loginform'))

在注册表格中的内容如下:

@if($errors->has('password') && !old('loginform'))

无需服务器端代码。