Laravel 5.1 - 覆盖默认登录的默认错误变量,以区分同一页面上的两个表单

时间:2015-11-30 22:12:43

标签: laravel laravel-5.1

我正在使用Laravel 5.1,我有一个带有侧边栏的创建表单,它还有一个登录表单。每当我提交创建表单并且它有错误时,我都会在登录表单和创建表单上看到错误。我明白为什么会这样。我在两个表单上使用@include('errors.list')。

list.php文件内的错误

@if  ($errors->any())
        <div class="alert alert-danger alert-dismissible" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            @foreach ($errors->all() as $error)
              <strong>• {{$error}}</strong><br/>
            @endforeach
        </div>
@endif

现在,我想在验证失败时更改登录表单上的错误值。我使用的是默认身份验证表单。我想创造类似的东西 如果验证失败 - &gt;返回('login_errors')而不是默认错误,所以我可以使用类似@if($ login_errors-&gt; any())

第二个问题是,如果不使用自定义验证,我该如何反向?我正在使用$ request,如果我想使用custom_errors将错误返回到创建表单。

2 个答案:

答案 0 :(得分:0)

我希望我理解正确 - 您想要自定义错误消息?以下是Laravel为此提供的文档:http://laravel.com/docs/5.1/validation#working-with-error-messages(向下滚动一点)。使用此功能,您可以继续使用相同的$errors->any()来检查是否存在任何错误消息。

答案 1 :(得分:0)

首先,你需要一些方法来区分表格。最简单的方法是在<form>中添加一个隐藏字段,用于此类

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

为了能够对新创建的触发器采取行动,您需要通过更改postLogin中的第24行来覆盖AuthenticatesAndRegistersUsers特征中的app/Http/Controllers/Auth/AuthController.php功能

use AuthenticatesAndRegistersUsers, ThrottlesLogins;

use AuthenticatesAndRegistersUsers {
    postLogin as laravelPostLogin;
}, ThrottlesLogins;

这将重命名larval提供的postLogin函数,以便我们可以将它们作为垫片放在它前面。 您的垫片函数应命名为postLogin,然后应调用现在重命名为laravelPostLogin的内置函数。

要跟踪使用的表单,我建议在larvel中使用session flash feature。在所有登录尝试中设置此项是完全正确的,无论登录是否成功。 flash变量只能持续一页加载,因此如果登录成功,它将不会受到影响。 postLogin应添加到AuthController.php中的某处,可能看起来像这样

public function postLogin(Request $request)
{
    if($request->has('loginFromSidebar')) {
        \Session::flash('loginFromSidebar', true);
    }
    return $this->laravelPostLogin($request);
}

然后你可以使用

@if(Session::has('loginFromSidebar'))
    @include('errors.list')
@endif
侧栏中的

,以及不在侧栏中的形式的反转。