Laravel 5.1 - 从FormRequest验证返回第一个错误

时间:2017-02-11 18:40:31

标签: php arrays validation laravel-5.1

我有以下表单请求:

class FileRequest extends Request
{

   public function authorize()
   {
      return true;
   }

   public function rules()
   {

      $rules = [];

      if($this->file_type == 'image')
         $rules['file'] = 'required|image|mimes:jpg,jpeg,gif|max:244|image_size:>=360,>=180';
    else
         $rules['file'] = 'required|mimes:doc,pdf,docx,txt,rtf|max:1000';

      return $rules;

   }

   public function messages()
   {
      $messages = [
        'file.image_size' => 'The image size is incorrect.'
      ];

      return $messages;
   }

   public function response(array $errors)
   {
        $content = "<textarea data-type=\"application/json\">{\"ok\": false, \"message\": \"" . $errors[0] . "\" }</textarea>";
         return response($content);

    }



}

如何从errors数组中返回第一个错误。

当我手动创建验证器时,我能够执行以下操作:$validator->errors()->first()但这在使用FormRequest类时不起作用。执行errors[0]只会给我一个偏移异常错误。

我正在使用iframe提交,这就是我需要如上所述返回响应的原因。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

您似乎需要使用laravel中的验证器系统。 之后你可以使用:$ validator-&gt; messages();因为有所有的错误。 如果你使用$ validator-&gt; messages()[0];你会收到第一条消息。

我建议你这样的事情

    <?php

        $email;$comment;$captcha;
         if(isset($_POST['gender'])){
          $email=$_POST['gender'];
          }if(isset($_POST['firstname'])){
          $email=$_POST['firstname'];
        }if(isset($_POST['lastname'])){
          $email=$_POST['lastname'];
        }if(isset($_POST['companyname'])){
          $email=$_POST['companyname'];
        }if(isset($_POST['customernumber'])){
          $email=$_POST['customernumber'];  
          }if(isset($_POST['email'])){
          $email=$_POST['email'];
        }if(isset($_POST['emailagain'])){
          $email=$_POST['emailagain'];
        }if(isset($_POST['telephonenumber'])){
          $email=$_POST['telephonenumber']; 
          }if(isset($_POST['subject'])){
          $email=$_POST['subject'];
        }if(isset($_POST['message'])){
          $email=$_POST['message'];   
        }if(isset($_POST['g-recaptcha-response'])){
          $captcha=$_POST['g-recaptcha-response'];
        }
        if(!$captcha){
          echo '<h2>Please check the captcha form.</h2>';
          exit;
        }
    $secretKey = "mtSecretKey";
    $ip = $_SERVER['REMOTE_ADDR'];
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);
    $responseKeys = json_decode($response,true);
        if(intval($responseKeys["success"]) !== 1) {
          echo '<h2>You are a spammer !</h2>';
        } else {
          echo '<h2>Thanks for your email.</h2>';
        }
?>

答案 1 :(得分:0)

我必须做以下事情:

$errors['file'][0]