Php Laravel验证:检查验证程序失败的原因

Php Laravel验证:检查验证程序失败的原因,php,validation,laravel,laravel-4,Php,Validation,Laravel,Laravel 4,是否有办法检查验证程序是否因唯一性规则而失败 $rules = array( 'email_address' => 'required|email|unique:users,email', 'postal_code' => 'required|alpha_num', ); $messages = array( 'required' => 'The :attribute fi

是否有办法检查验证程序是否因
唯一性规则而失败

$rules = array(
            'email_address' => 'required|email|unique:users,email',
            'postal_code' => 'required|alpha_num',
        );

        $messages = array(
            'required' => 'The :attribute field is required',
            'email' => 'The :attribute field is required',
            'alpha_num' => 'The :attribute field must only be letters and numbers (no spaces)'
        );

        $validator = Validator::make(Input::all(), $rules, $messages);

        if ($validator->fails()) {

用外行的话说,我基本上想知道:“验证失败是因为电子邮件地址不唯一吗?”

这将显示一个错误并告诉您失败的原因:

控制器

if($validation->fails()){

   return Redirect::back()->withErrors($validation)->withInput();
}

foreach($errors->all() as $error) {
  echo $error;
}
在刀片模板中添加以下内容:

   @foreach($errors->all() as $error)
        <div>
           {{$error}}
        </div>
   @endforeach
@foreach($errors->all()作为$error)
{{$error}}
@endforeach
这将返回一条包含任何错误的消息。电子邮件不匹配。字段是必填的。废话

您还可以从$message中删除该电子邮件阵列。验证器将为您处理所有这些。您只想在需要自定义消息时使用它

您还可以尝试使用var_转储此语句:


变量转储($validation->errors());死亡

在返回的失败规则数组中检查特定规则

if ($validator->fails()) {

    $failedRules = $validator->failed();

    if(isset($failedRules['email_address']['Unique'])) {

    ...

可能提供通过其他验证规则的输入?(并检查错误消息)。但您可以确切地看到我正在检查的输入<代码>电子邮件地址
邮政编码
是,但在进入视图之前,我需要知道我的控制器中出现了什么故障。在控制器中,您可以使用相同的foreach,它将显示在控制器中。我编辑了我的答案,这样您就可以看到$errors->all()生成对非对象上的成员函数all()的调用对不起,是的,这不起作用,因为它应该重定向回上一页。我将更新答案。检查我的答案您可能只需要使用var_dump($validation->errors())对结果进行var转储;死亡转换为json后,它似乎返回
{“email_address”:{“Unique”:[“users”,“email”]}
updated。你必须按字段检查它,每个字段都有自己的规则数组。几乎,但它仍然总是返回false,尽管我可以看到它是真的。更新后,规则
Unique
是一个键,因此
在数组中
不起作用:)所以我使用
isset