양식 유효성 검사


~

양식 유효성 검사

소개

Laravel은 여러 가지 다른 방법을 제공합니다. 애플리케이션에 전달된 데이터의 유효성을 검사합니다. 기본적으로 Laravel의 컨트롤러 기본 클래스는 다양하고 강력한 유효성 검사 규칙을 사용하여 들어오는 HTTP 요청의 유효성을 검사하는 편리한 방법을 제공하는 ValidatesRequests Traits를 사용합니다.

빠른 검증

Laravel의 강력한 검증 기능을 이해하기 위해 양식을 검증하고 사용자에게 오류 메시지를 표시하는 전체 예를 살펴보겠습니다.

경로 정의

먼저 다음 경로가 routes/web.php 파일에 정의되어 있다고 가정해 보겠습니다. routes/web.php 文件中定义了下面这些路由:

Route::get('post/create', 'PostController@create');
Route::post('post', 'PostController@store');

显然,GET 路由会显示一个供用户创建一个新的博客帖子的表单,而 POST 路由会将新的博客文章存储在数据库中。

创建路由器

下面让我们一起来看看处理这些路由的控制器, store 方法暂时留空。

<?php
  namespace App\Http\Controllers;
  use Illuminate\Http\Request;
  use App\Http\Controllers\Controller;
  class PostController extends Controller{    
      /**
     * 显示创建博客文章的表单。
     *
     * @return Response
     */   
  public function create()   
   {       
    return view('post.create');    
    }   
     /**
     * 保存一篇新的博客文章。
     *
     * @param  Request  $request
     * @return Response
     */   
    public function store(Request $request)   
     {      
       // 验证并存储博客文章...   
      }
   }

编写验证器逻辑

现在我们开始在 store 方法中编写逻辑来验证新的博客文章。为此,我们将使用 IlluminateHttpRequest 对象提供的 validate 方法 。如果验证通过,代码就可以正常的运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。在典型的 HTTP 请求的情况下,会生成一个重定向响应,而对于 AJAX 请求则会发送 JSON 响应。

让我们接着回到 store 方法来深入理解 validate 方法:

/**
 * 保存一篇新的博客文章。
 *
 * @param  Request  $request
 * @return Response
 */
 public function store(Request $request){ 
    $validatedData = $request->validate([      
      'title' => 'required|unique:posts|max:255',        
      'body' => 'required',    
    ]);    
    // 博客文章验证通过
  }

如你所见,我们将所需的验证规则传递至 validate 方法中。另外再提醒一次,如果验证失败,会自动生成一个对应的响应。如果验证通过,那我们的控制器将会继续正常运行。

首次验证失败后停止运行

如果你希望在某个属性第一次验证失败后停止运行验证规则,你需要附加 bail 规则到该属性:

$request->validate([   
 'title' => 'bail|required|unique:posts|max:255',    
 'body' => 'required',
]);

在这个例子中,如果 title 字段没有通过 unique 规则,那么程序就不会继续检查 max

$request->validate([   
 'title' => 'required|unique:posts|max:255',    
 'author.name' => 'required',    
 'author.description' => 'required',
]);

분명히 GET 경로는 사용자가 새 블로그 게시물을 생성할 수 있는 양식을 표시하는 반면, POST 경로는 새 블로그 게시물을 데이터베이스에 저장합니다.

라우터 만들기

이러한 경로를 처리하는 방법을 살펴보겠습니다. 컨트롤러, store 메소드는 일시적으로 비어 있습니다.

<!-- /resources/views/post/create.blade.php -->
<h1>创建文章</h1>
@if ($errors->any())  
  <div class="alert alert-danger">     
     <ul>
       @foreach ($errors->all() as $error)                
       <li>{{ $error }}</li>
            @endforeach
      </ul>    
   </div>
 @endif
 <!-- 创建文章表单 -->

🎜🎜검증기 로직 작성🎜🎜이제 store 메서드에 작성하세요. 이를 위해 IlluminateHttpRequest 객체에서 제공하는 validate 메서드를 사용합니다. 확인이 통과되면 코드가 정상적으로 실행될 수 있습니다. 확인에 실패하면 예외가 발생하고 해당 오류 응답이 자동으로 사용자에게 반환됩니다. 일반적인 HTTP 요청의 경우 리디렉션 응답이 생성되고, AJAX 요청의 경우 JSON 응답이 전송됩니다. 🎜🎜validate 메서드를 자세히 이해하기 위해 store 메서드로 돌아가 보겠습니다. 🎜
$request->validate([  
  'title' => 'required|unique:posts|max:255',    
  'body' => 'required',    
  'publish_at' => 'nullable|date',
]);
🎜보시다시피 필수 유효성 검사 규칙을 validate에 전달합니다. 메소드. 또한, 다시 한 번 확인에 실패하면 해당 응답이 자동으로 생성됩니다. 검증이 통과되면 컨트롤러는 계속해서 정상적으로 작동합니다. 🎜
🎜🎜첫 번째 유효성 검사 실패 후 실행 중지🎜🎜속성이 처음으로 유효성 검사에 실패한 후 유효성 검사 규칙 실행을 중지하려면 다음을 추가해야 합니다. 이 속성에 대한 bail 규칙: 🎜
php artisan make:request StoreBlogPost
🎜이 예에서 title 필드가 unique 규칙을 전달하지 않으면 프로그램은 계속해서 max 규칙을 확인하세요. 규칙은 할당된 순서대로 확인됩니다. 🎜🎜🎜🎜배열 데이터 구현에 대한 참고사항🎜🎜HTTP 요청에 "중첩" 매개변수(예: 배열)가 포함된 경우 유효성 검사 규칙의 "점" 구문을 통해 이러한 매개변수를 지정할 수 있습니다. 🎜
/**
 * 获取适用于请求的验证规则。
 *
 * @return array
 */
 public function rules(){   
  return [       
    'title' => 'required|unique:posts|max:255',        
    'body' => 'required',    
    ];
  }
🎜🎜🎜🎜🎜🎜

확인 오류 메시지 표시

수신 요청 매개변수가 지정된 확인 규칙을 통과하지 못하면 어떻게 되나요? 앞서 언급했듯이 Laravel은 자동으로 사용자를 이전 위치로 리디렉션합니다. 또한 모든 유효성 검사 오류 메시지는 세션에 자동으로 저장됩니다. session 中。

重申一次,我们不必在 GET 路由中将错误消息显式绑定到视图。因为 Lavarel 会检查在 Session 数据中的错误信息,并自动将其绑定到视图(如果这个视图文件存在)。而其中的变量 $errorsIlluminateSupportMessageBag 的一个实例。要获取关于这个对象的更多信息,请  查阅这个文档 。

{tip} $errors 变量被 Web 中间件组提供的 IlluminateViewMiddlewareShareErrorsFromSession 中间件绑定到视图中。 当这个中间件被应用后,在你的视图中就可以获取到 $error 变量 , 可以使一直假定 $errors 变量存在并且可以安全地使用。

在上面的例子中,当验证失败的时候,用户将会被重定向到控制器的 create 方法,使我们能在视图中显示错误信息:

/**
 * 存储传入的博客文章。
 *
 * @param  StoreBlogPost  $request
 * @return Response
 */
 public function store(StoreBlogPost $request){   
  // 传入的请求通过验证...    
  // 获取通过验证的数据...    
  $validated = $request->validated();
 }

关于可选字段的注意事项

默认情况下,在 Laravel 应用的全局中间件堆栈 AppHttpKernel 类中包含了 TrimStringsConvertEmptyStringsToNull 中间件。因此,如果你不希望验证程序将 null 值视为无效的话,那就需要将「可选」的请求字段标记为 nullable,举个例子:

/**
 *  配置验证器实例。
 *
 * @param  \Illuminate\Validation\Validator  $validator
 * @return void
 */
 public function withValidator($validator){ 
    $validator->after(function ($validator) {        
         if ($this->somethingElseIsInvalid()) {           
              $validator->errors()->add('field', 'Something is wrong with this field!');        
             }   
         });
   }

在这个例子里,我们指定 publish_at 字段可以为 null 或者一个有效的日期格式。如果 nullable 的修饰词没有被添加到规则定义中,验证器会认为 null 是一个无效的日期格式。

AJAX 请求 & 验证

在这个例子中,我们使用传统的表单将数据发送到应用程序。但实际情况中,很多程序都会使用 AJAX 来发送请求。当我们对 AJAX 的请求中使用 validate

다시 한 번 말씀드리지만, GET 경로의 뷰에 오류 메시지를 명시적으로 바인딩할 필요는 없습니다. Lavarel은 세션 데이터의 오류 정보를 확인하고 자동으로 뷰에 바인딩하기 때문입니다(뷰 파일이 있는 경우). $errors 변수는 IlluminateSupportMessageBag의 인스턴스입니다. 이 개체에 대한 자세한 내용은 이 설명서를 참조하세요.

{tip} $errors 변수는 Web 미들웨어 그룹에서 제공하는 IlluminateViewMiddlewareShareErrorsFromSession 미들웨어에 의해 뷰에 바인딩됩니다. 이 미들웨어가 적용되면 뷰에서 $error 변수를 얻을 수 있으며, 이는 항상 $errors 변수가 존재한다고 가정할 수 있습니다. 사용하는 것이 안전합니다.

위 예에서 유효성 검사가 실패하면 사용자는 컨트롤러의 create 메서드로 리디렉션되어 보기에 오류 메시지를 표시할 수 있습니다.
/**
 * 判断用户是否有权限做出此请求。
 *
 * @return bool
 */
 public function authorize(){  
   $comment = Comment::find($this->route('comment'));    
   return $comment && $this->user()->can('update', $comment);
 }

선택적 필드에 대한 참고사항

기본적으로 Laravel 애플리케이션용 글로벌 미들웨어 스택에는, AppHttpKernel 클래스에는 TrimStringsConvertEmptyStringsToNull 미들웨어가 포함되어 있습니다. 따라서 유효성 검사기가 null 값을 유효하지 않은 값으로 처리하지 않도록 하려면 "선택적" 요청 필드를 nullable로 표시해야 합니다. 예:
Route::post('comment/{comment}');
이 예에서는 publish_at 필드가 null이거나 유효한 날짜 형식일 수 있음을 지정합니다. nullable 한정자가 규칙 정의에 추가되지 않은 경우 유효성 검사기는 null을 잘못된 날짜 형식으로 간주합니다. 🎜🎜🎜🎜
🎜

AJAX 요청 및 검증

🎜여기서 이 예에서는 전통적인 양식을 사용하여 애플리케이션에 데이터를 보냅니다. 그러나 실제로는 많은 프로그램이 AJAX를 사용하여 요청을 보냅니다. AJAX 요청에서 validate 메소드를 사용하면 Laravel은 리디렉션 응답을 생성하지 않고 대신 모든 유효성 검사 오류 정보가 포함된 JSON 응답을 생성합니다. 이 JSON 응답은 HTTP 상태 코드 422와 함께 전송됩니다. 🎜🎜🎜🎜🎜🎜🎜🎜확인 양식 요청🎜🎜🎜🎜🎜🎜🎜

양식 요청 확인 만들기

보다 복잡한 확인 시나리오에 직면하면 "양식 요청"을 만들어 더 복잡한 논리를 처리할 수 있습니다. 양식 요청은 유효성 검사 논리가 포함된 사용자 정의 요청 클래스입니다. Artisan 명령어 make:request를 사용하여 양식 요청 클래스를 생성할 수 있습니다: make:request 来创建表单请求类:

/**
 * 判断用户是否有权限进行此请求。
 *
 * @return bool
 */
 public function authorize(){  
   return true;
  }

新生成的类保存在 app/Http/Requests 目录下。如果这个目录不存在,运行 make:request 命令时它会被创建出来。让我们添加一些验证规则到 rules 方法中:

/**
 * 获取已定义验证规则的错误消息。
 *
 * @return array
 */
 public function messages(){  
   return [       
    'title.required' => 'A title is required',        
    'body.required'  => 'A message is required',    
    ];
  }

{tip} 你可以向 rules 方法传入所需的任何依赖项。他们会自动被 Laravel 提供的 服务容器 自动解析。

验证规则是如何运行的呢?你所需要做的就是在控制器方法中类型提示传入的请求。在调用控制器方法之前验证传入的表单请求,这意味着你不需要在控制器中写任何验证逻辑:

/**
 * 获取验证错误的自定义属性。
 *
 * @return array
 */
 public function attributes(){  
   return [      
     'email' => 'email address',    
     ];
   }

如果验证失败,就会生成一个让用户返回到先前的位置的重定向响应。这些错误也会被闪存到 session 中,以便这些错误都可以在页面中显示出来。如果传入的请求是 AJAX,会向用户返回具有 422 状态代码和验证错误信息的 JSON 数据的 HTTP 响应。

添加表单请求后钩子

如果你想在表单请求「之后」添加钩子,可以使用 withValidator 方法。这个方法接收一个完整的验证构造器,允许你在验证结果返回之前调用任何方法:

<?php
   namespace App\Http\Controllers;use Validator;
   use Illuminate\Http\Request;
   use App\Http\Controllers\Controller;
   class PostController extends Controller{    
      /**
     * 保存一篇新的博客文章。
     *
     * @param  Request  $request
     * @return Response
     */   
    public function store(Request $request)   
     {       
      $validator = Validator::make($request->all(), [      
            'title' => 'required|unique:posts|max:255',            
            'body' => 'required',        
          ]);       
        if ($validator->fails()) {          
          return redirect('post/create')                       
           ->withErrors($validator)                        
           ->withInput();       
           }       
       // Store the blog post...  
        }
      }

表单请求授权验证

表单请求类内也包含了 authorize 方法。在这个方法中,你可以检查经过身份验证的用户确定其是否具有更新给定资源的权限。比方说,你可以判断用户是否拥有更新文章评论的权限:

Validator::make($request->all(), [   
 'title' => 'required|unique:posts|max:255',    
 'body' => 'required',
])->validate();

由于所有的表单请求都是继承了 Laravel 中的请求基类,所以我们可以使用 user 方法去获取当前认证登录的用户。同时请注意上述例子中对 route 方法的调用。这个方法允许你在被调用的路由上获取其定义的 URI 参数,譬如下面例子中的 {comment} 参数:

return redirect('register')          
  ->withErrors($validator, 'login');

如果 authorize 方法返回 false,则会自动返回一个包含 403 状态码的 HTTP 响应,也不会运行控制器的方法。

如果你打算在应用程序的其它部分处理授权逻辑,只需从 authorize 方法返回 true

{{ $errors->login->first('email') }}

{tip} 你可以向 authorize

$validator = Validator::make(...);$validator->after(function ($validator) {   
 if ($this->somethingElseIsInvalid()) {     
    $validator->errors()->add('field', 'Something is wrong with this field!');   
     }
   });
 if ($validator->fails()) {  
   //
 }

새로 생성된 클래스는 app/Http/Requests 디렉터리에 저장됩니다. 이 디렉터리가 없으면 make:request 명령을 실행할 때 생성됩니다. rules 메서드에 몇 가지 유효성 검사 규칙을 추가해 보겠습니다.
$errors = $validator->errors();echo $errors->first('email');

{tip} rules 메서드에 원하는 종속성을 전달할 수 있습니다. 이는 Laravel이 제공하는 서비스 컨테이너에 의해 자동으로 해결됩니다.

검증 규칙은 어떻게 작동하나요? 당신이 해야 할 일은 컨트롤러 메소드에서 들어오는 요청을 유형 힌트하는 것뿐입니다. 컨트롤러 메서드를 호출하기 전에 들어오는 양식 요청의 유효성을 검사합니다. 즉, 컨트롤러에 유효성 검사 논리를 작성할 필요가 없습니다.
foreach ($errors->get('email') as $message) {  
  //
}
유효성 검사에 실패하면 사용자를 이전 위치로 되돌리는 리디렉션 응답이 생성됩니다. 이러한 오류는 페이지에 표시될 수 있도록 session에도 플래시됩니다. 수신 요청이 AJAX인 경우 422 상태 코드 및 유효성 검사 오류 정보가 포함된 JSON 데이터의 HTTP 응답이 사용자에게 반환됩니다. 🎜
🎜

양식 요청 후 후크 추가

🎜양식 요청 "뒤에" 후크를 추가하려면 를 사용할 수 있습니다. withValidator 메소드. 이 메서드는 완전한 유효성 검사 생성자를 허용하므로 유효성 검사 결과가 반환되기 전에 모든 메서드를 호출할 수 있습니다. 🎜
foreach ($errors->get('attachments.*') as $message) { 
   //
}
🎜🎜🎜
🎜🎜양식 요청 인증 확인🎜🎜양식 요청 클래스에는 authorize 메소드도 포함되어 있습니다. 이 방법을 사용하면 인증된 사용자에게 해당 리소스를 업데이트할 수 있는 권한이 있는지 확인할 수 있습니다. 예를 들어, 사용자에게 기사 댓글을 업데이트할 수 있는 권한이 있는지 확인할 수 있습니다: 🎜
foreach ($errors->all() as $message) { 
   //
}
🎜모든 양식 요청은 Laravel의 요청 기본 클래스를 상속하므로 user 메소드를 사용하여 현재 인증을 가져올 수 있습니다. 로그인한 사용자. 위 예에서 route 메소드에 대한 호출도 참고하세요. 이 메서드를 사용하면 다음 예의 {comment} 매개 변수와 같이 호출되는 경로에 정의된 URI 매개 변수를 가져올 수 있습니다. 🎜
if ($errors->has('email')) { 
   //
}
🎜 authorize 메서드가 반환되는 경우 false, 403 상태 코드가 포함된 HTTP 응답이 자동으로 반환되고 컨트롤러 메서드가 실행되지 않습니다. 🎜🎜애플리케이션의 다른 부분에서 승인 논리를 처리하려는 경우 authorize 메서드에서 true를 반환하면 됩니다. 🎜
$messages = [  
  'required' => 'The :attribute field is required.',
 ];
 $validator = Validator::make($input, $rules, $messages);
🎜{tip} < code>authorize 메소드는 필수 종속성을 전달합니다. 이는 Laravel이 제공하는 서비스 컨테이너에 의해 자동으로 해결됩니다. 🎜🎜🎜🎜🎜🎜🎜🎜

사용자 정의된 오류 메시지

양식 요청의 messages 메소드를 재정의하여 오류 메시지를 사용자 정의할 수 있습니다. 이 메소드는 속성/규칙 쌍의 배열과 해당 오류 메시지를 반환해야 합니다: messages 方法来自定义错误消息。此方法应返回属性 / 规则对数组及其对应错误消息:

$messages = [   
 'same'=> 'The :attribute and :other must match.',    
 'size'=> 'The :attribute must be exactly :size.',    
 'between' => 'The :attribute value :input is not between :min - :max.',    
 'in'=> 'The :attribute must be one of the following types: :values',
];

自定义验证属性

如果你希望将验证消息的 :attribute 部分替换为自定义属性名称,则可以重写 attributes 方法来指定自定义名称。此方法应返回属性 / 名称对的数组:

$messages = [ 
   'email.required' => 'We need to know your e-mail address!',
 ];

手动创建验证器

如果你不想在请求上使用 validate 方法,你可以通过 Validator facade 手动创建一个验证器示例。
Validator facade 上的 make 方法创建一个验证器示例:

'custom' => [  
  'email' => [    
      'required' => 'We need to know your e-mail address!',  
      ],
    ],

传给 make 方法的第一个参数是需要验证的数据。第二个参数则是该数据的验证规则。

如果验证失败,则可以使用 withErrors 方法把错误消息闪存到 Session 。使用这个方法进行重定向后, $errors 变量会自动和视图共享,你可以把这些消息显示给用户。 withErrors 方法接收验证器、MessageBag 或 PHP Array

自动重定向

如果你想手动创建验证器实例,又想使用 validates 方法提供的自动重定向,那么你可以在现有的验证器示例上调用 validate 方法。如果验证失败,用户将会自动重定向。在 AJAX 请求中,则会返回 JSON 格式的响应。

'attributes' => [  
  'email' => 'email address',
 ],

命名错误包

如果你一个页面中有多个表单,你可以通过命名错误包来检索特定表单的错误消息。只需给 withErrors 方法传递一个名字作为第二个参数

$request->validate([  
  'credit_card_number' => 'required_if:payment_type,cc'
 ]);

然后你就可以从 $errors 变量中获取指定表单的错误消息:

    当payment type为cc时,credit card number 不能为空。

验证后钩子

验证器还允许你添加在验证成功之后允许的回调函数,以便你进行下一步的验证,甚至在消息集合中添加更多的错误消息。使用它只需在验证实例上使用 after

'values' => [ 
   'payment_type' => [    
       'cc' => '信用卡' 
        ],
    ],

사용자 정의 유효성 검사 속성
유효성 검사 메시지의 :attribute 부분을 사용자 정의 속성 이름으로 바꾸려면 attributes 메서드를 재정의하여 맞춤 이름. 이 메소드는 속성/이름 쌍의 배열을 반환해야 합니다: 🎜
    当payment type 为信用卡时,credit card number不能为空。
🎜🎜🎜
🎜

수동으로 만들기 유효성 검사기

🎜요청에 validate 메서드를 사용하지 않으려면 Validator 파사드를 통해 수동으로 유효성 검사기 예제를 생성할 수 있습니다.
Validator 파사드에서 make 메서드를 사용하여 유효성 검사기 예제를 만듭니다. 🎜
'start_date' => 'required|date|after:tomorrow'
🎜 make 메서드에 전달된 첫 번째 매개변수는 다음과 같습니다. 확인이 필요한 데이터입니다. 두 번째 매개변수는 데이터의 유효성 검사 규칙입니다. 🎜🎜검증이 실패하면 withErrors 메서드를 사용하여 오류 메시지를 세션에 플래시할 수 있습니다. 이 방법을 사용하여 리디렉션하면 $errors 변수가 자동으로 뷰와 공유되며 이러한 메시지를 사용자에게 표시할 수 있습니다. withErrors 메서드는 유효성 검사기, MessageBag 또는 PHP Array 를 받습니다. 🎜🎜
🎜🎜
🎜🎜자동 리디렉션🎜🎜검증기 인스턴스를 수동으로 생성하고 validates 메소드가 자동 리디렉션을 제공하면 기존 유효성 검사기 예제에서 validate 메소드를 호출할 수 있습니다. 확인에 실패하면 사용자가 자동으로 리디렉션됩니다. AJAX 요청에서는 JSON 형식의 응답이 반환됩니다. 🎜
'finish_date' => 'required|date|after:start_date'
🎜
🎜🎜
🎜🎜이름이 지정된 오류 가방🎜🎜한 페이지에 여러 양식이 있는 경우 오류가 발생합니다. 특정 양식에 대한 메시지는 오류 패키지 이름을 지정하여 검색할 수 있습니다. withErrors 메소드의 두 번째 매개변수로 이름을 전달하기만 하면 됩니다. 🎜
'avatar' => 'dimensions:min_width=100,min_height=200'
🎜 그런 다음 $errors 변수에서 지정된 형식에 대한 오류 메시지를 얻을 수 있습니다: 🎜
'avatar' => 'dimensions:ratio=3/2'
🎜< a name="after-validation-hook">🎜🎜
🎜🎜사후 유효성 검사 후크🎜🎜 유효성 검사기를 사용하면 성공 후 허용되는 콜백 함수를 추가할 수도 있습니다. 유효성 검사를 통해 추가 확인을 수행하고 메시지 컬렉션에 더 많은 오류 메시지를 추가할 수도 있습니다. 이를 사용하려면 검증 인스턴스에서 after 메소드를 사용하세요: 🎜
use Illuminate\Validation\Rule;
Validator::make($data, [  
  'avatar' => [     
     'required',        
     Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2),    
   ],
  ]);
🎜🎜🎜🎜🎜🎜

오류 메시지 처리

Validator 인스턴스에서 errors 메소드를 호출한 후, 다양한 편리한 메소드가 있는 IlluminateSupportMessageBag 인스턴스를 얻게 됩니다. 오류 메시지. $errors 변수는 모든 뷰에 자동으로 제공되며 MessageBag 클래스의 인스턴스이기도 합니다. Validator 实例上调用 errors 方法后,你会得到一个 IlluminateSupportMessageBag 实例,它拥有各种方便的方法处理错误信息。自动提供给所有视图的 $ errors 变量,也是 MessageBag 类的一个实例。

查看特定字段的第一个错误信息

要查看特定字段的第一个错误消息,可以使用 first 方法:

'foo.*.id' => 'distinct'

查看特定字段的所有错误消息

如果你需要获取指定字段的所有错误消息的数组,则可以使用 get 方法:

'state' => 'exists:states'

如果要验证表单的数组字段,你可以使用 * 来获取每个数组元素的所有错误消息:

'state' => 'exists:states,abbreviation'

查看所有字段的所有错误消息

如果你想要得到所有字段的所有错误消息,可以使用 all 方法:

'email' => 'exists:connection.staff,email'

判断特定字段是否含有错误消息

has 方法可以被用来判断给定的字段是否存在错误信息:

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'email' => [      
    'required',        
    Rule::exists('staff')->where(function ($query) {  
           $query->where('account_id', 1);    
        }),
     ],
  ]);

自定义错误消息

如果有需要的话,你也可以使用自定义错误消息取代默认值进行验证。有几种方法可以指定自定义消息。首先,你可以将自定义消息作为第三个参数传递给 Validator::make 方法:

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'zones' => [      
    'required',        
    Rule::in(['first-zone', 'second-zone']),  
   ],
]);

在这个例子中,:attribute 占位符会被验证字段的实际名称取代。除此之外,你还可以在验证消息中使用其它占位符。例如:

'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'

为给定属性指定自定义消息

有时候你可能只想为特定的字段自定义错误消息。只需在属性名称后使用「点」语法来指定验证的规则即可:

'photo' => 'mimes:jpeg,bmp,png'

在语言文件中指定自定义消息

在大多数情况下,您可能会在语言文件中指定自定义消息,而不是直接将它们传递给 Validator。为此,需要把你的消息放置于 resources/lang/xx/validation.php 语言文件内的 custom 数组中。

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'toppings' => [     
     'required',        
     Rule::notIn(['sprinkles', 'cherries']), 
     ],
 ]);

在语言文件中指定自定义属性

如果你希望将验证消息的 :attribute 占位符替换为自定义属性名称,你可以在 resources/lang/xx/validation.php 语言文件的 attributes

특정 필드의 첫 번째 오류 메시지 보기

특정 필드의 첫 번째 오류 메시지를 보려면 첫 번째 방법:
use Illuminate\Validation\Rule;
Validator::make($request->all(), [  
  'role_id' => Rule::requiredIf($request->user()->is_admin),]);
  Validator::make($request->all(), [   
   'role_id' => Rule::requiredIf(function () use ($request) {     
      return $request->user()->is_admin;   
      }),
    ]);
🎜

특정 필드에 대한 모든 오류 메시지 보기

🎜모든 오류 메시지를 가져와야 하는 경우 지정된 필드 배열에 대해 get 메소드를 사용할 수 있습니다: 🎜
'email' => 'unique:users,email_address'
🎜 양식의 배열 필드를 확인하려면 *를 사용하여 다음에 대한 모든 오류 메시지를 가져올 수 있습니다. 각 배열 요소: 🎜
'email' => 'unique:connection.users,email_address'
🎜

모든 필드에 대한 모든 오류 메시지 보기

🎜모든 필드에 대한 모든 오류 메시지를 얻으려면 all 방법을 사용할 수 있습니다: 🎜
use Illuminate\Validation\Rule;
Validator::make($data, [ 
   'email' => [      
     'required',        
     Rule::unique('users')->ignore($user->id),  
     ],
 ]);
🎜

특정 필드에 오류 메시지가 포함되어 있는지 확인

🎜 has 메소드를 사용하여 특정 필드에 오류 메시지가 있는지 확인할 수 있습니다: 🎜
Rule::unique('users')->ignore($user)
🎜🎜
🎜

사용자 정의 오류 메시지

🎜필요한 경우 사용자 정의 오류 메시지를 사용하여 확인을 위한 기본값을 바꿀 수도 있습니다. 사용자 정의 메시지를 지정하는 방법에는 여러 가지가 있습니다. 먼저, 사용자 정의 메시지를 Validator::make 메소드의 세 번째 인수로 전달할 수 있습니다. 🎜
Rule::unique('users')->ignore($user->id, 'user_id')
🎜이 예에서 :attribute 자리 표시자는 실제 대신 필드 이름을 입력하세요. 또한 확인 메시지에 다른 자리 표시자를 사용할 수도 있습니다. 예: 🎜
Rule::unique('users', 'email_address')->ignore($user->id),
🎜

특정 속성에 대한 사용자 정의 메시지 지정

🎜때때로 특정 속성에 대한 오류 메시지만 사용자 정의하고 싶을 수도 있습니다. 필드 . 유효성 검사 규칙을 지정하려면 속성 이름 뒤에 "점" 구문을 사용하세요. 🎜
'email' => Rule::unique('users')->where(function ($query) {  
  return $query->where('account_id', 1);
})
🎜🎜
🎜

언어 파일에 사용자 정의 메시지 지정

🎜대부분의 경우 Validator에 직접 전달하는 대신 언어 파일에 사용자 정의 메시지를 지정하게 될 것입니다. 이렇게 하려면 resources/lang/xx/validation.php 언어 파일 내의 custom 배열에 메시지를 배치하세요. 🎜
$v = Validator::make($data, [    'email' => 'sometimes|required|email',]);
🎜

언어 파일에서 사용자 정의 속성 지정

🎜메시지의 :attribute 자리 표시자를 확인하려는 경우 resources/lang/xx/validation.php 언어 파일의 attributes 배열에서 지정할 수 있는 사용자 정의 속성 이름으로 대체됩니다: 🎜
$v = Validator::make($data, [  
  'email' => 'required|email',    
  'games' => 'required|numeric',
]);
🎜 🎜

언어 파일에서 사용자 정의 값을 지정하세요

때때로 유효성 검사 메시지의 :value 자리 표시자를 값에 대한 사용자 정의 리터럴로 바꿔야 할 수도 있습니다. 예를 들어 결제_유형 값이 cc인 경우 신용카드 번호가 필요함을 지정하는 다음 확인 규칙을 사용합니다. :value 占位符替换为值的自定义文字。例如,如果 payment_type 的值为 cc,使用以下验证规则,该规则指定需要信用卡号:

$v->sometimes('reason', 'required|max:500', function ($input) {  
  return $input->games >= 100;
});

如果此验证规则失败,则会产生以下错误消息:

$v->sometimes(['reason', 'cost'], 'required', function ($input) {   
   return $input->games >= 100;
 });

您可以通过定义 values 数组,在 validation 语言文件中指定自定义值表示,而不是显示 cc

$validator = Validator::make($request->all(), [  
  'photos.profile' => 'required|image',
]);

이 확인 규칙이 실패하면, 다음 오류 메시지가 생성됩니다.

$validator = Validator::make($request->all(), [  
  'person.*.email' => 'email|unique:users',    
  'person.*.first_name' => 'required_with:person.*.last_name',
]);

ccvalues 배열을 정의하여 validation 언어 파일에 사용자 정의 값 표현을 지정할 수 있습니다. code>를 결제 유형으로 값:

'custom' => [  
  'person.*.email' => [    
      'unique' => 'Each person must have a unique e-mail address',   
     ]
    ],
이제 유효성 검사 규칙이 실패하면 다음 메시지가 생성됩니다.
php artisan make:rule Uppercase

🎜🎜🎜

사용 가능한 유효성 검사 규칙

다음은 사용 가능한 모든 유효성 검사 규칙 및 해당 기능 목록입니다.

accepted

확인 필드는 yes, on, 1 또는 true이어야 합니다. 이는 서비스 약관에 동의하는지 확인할 때 유용합니다.

active_url

PHP 함수 dns_get_record에 따르면 유효성 검사 필드에는 유효한 A 또는 AAAA 레코드가 있어야 합니다. dns_get_record,验证字段必须具有有效的 A 或 AAAA 记录。

after:date

验证字段必须是给定日期之后的值。日期值将传递到 PHP 函数 strtotime

<?php
  namespace App\Rules;
  use Illuminate\Contracts\Validation\Rule;
  class Uppercase implements Rule{   
        /**
     * 判断验证规则是否通过。
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */   
    public function passes($attribute, $value)   
     {       
       return strtoupper($value) === $value;   
      }   
     /**
     * 获取验证错误消息。
     *
     * @return string
     */   
    public function message()  
      {       
       return 'The :attribute must be uppercase.';   
       }
      }

您可以指定另一个要与日期进行比较的字段,而不是传递要由 strtotime 处理的日期字符串:

/**
 * 获取验证错误消息。
 *
 * @return string
 */
 public function message(){  
   return trans('validation.uppercase');
  }

after_or_equal:date

验证字段必须是在给定日期之后或与此日期相同的值。更多信息,请参阅 after 规则。

alpha

验证字段必须完全由字母构成。

alpha_dash

验证字段可能包含字母、数字,以及破折号 (-) 和下划线 ( _ )。

alpha_num

验证字段必须是完全是字母、数字。

array

验证的字段必须是一个 PHP 数组。

bail

在第一次验证失败后停止运行验证规则。

before:date

验证字段必须是在给定日期之前。这个日期值将会被传递给  PHP 的  strtotime 函数来计算。

before_or_equal:date

验证字段必须是在给定日期之前或与之相同的日期。这个日期值将会被传递给  PHP 的  strtotime 函数来计算。

between:min,max

验证字段的大小必须在给定的  min 和  max 之间。字符串、数字、数组和文件的计算方式都使用  size

after:

date
🎜확인 필드는 지정된 날짜 이후의 값이어야 합니다. 날짜 값은 PHP 함수 strtotime에 전달됩니다. 🎜
use App\Rules\Uppercase;$request->validate([  
  'name' => ['required', 'string', new Uppercase],
]);
🎜 strtotime에서 처리할 날짜 문자열을 전달하는 대신 날짜와 비교할 다른 필드를 지정할 수 있습니다. :🎜
$validator = Validator::make($request->all(), [   
 'title' => [      
   'required',        
   'max:255',        
   function ($attribute, $value, $fail) {          
     if ($value === 'foo') {              
       $fail($attribute.' is invalid.');      
             }      
            },    
          ],
        ]);
🎜🎜🎜
🎜🎜after_or_equal:🎜date🎜🎜🎜확인 필드를 입력해야 합니다. 지정된 날짜 이후 또는 같은 값입니다. 자세한 내용은 after🎜 규칙을 참조하세요. 🎜🎜🎜🎜
🎜🎜alpha🎜🎜확인 필드는 문자로만 구성되어야 합니다. 🎜🎜🎜🎜
🎜🎜alpha_dash🎜🎜검증 필드에는 문자, 숫자, 대시(-)가 포함될 수 있습니다. 밑줄(_). 🎜🎜🎜🎜
🎜🎜alpha_num🎜🎜확인 필드는 문자와 숫자로만 구성되어야 합니다. 🎜🎜🎜🎜
🎜🎜array🎜🎜확인할 필드는 PHP 배열이어야 합니다. 🎜🎜🎜🎜
🎜🎜bail🎜🎜첫 번째 검증 실패 후 검증 규칙 실행을 중지합니다. 🎜🎜🎜🎜
🎜🎜before:🎜date🎜🎜🎜확인 필드는 지정된 날짜 이전이어야 합니다. 이 날짜 값은 계산을 위해 PHP의 strtotime 함수에 전달됩니다. 🎜🎜🎜🎜
🎜🎜before_or_equal:🎜date🎜🎜🎜확인 필드는 지정된 날짜에 있어야 합니다. 같은 날짜 이전 또는 같은 날짜. 이 날짜 값은 계산을 위해 PHP의 strtotime 함수에 전달됩니다. 🎜🎜🎜🎜
🎜🎜between:🎜min🎜,🎜max🎜🎜🎜확인 필드의 크기는 다음과 같아야 합니다. 🎜min🎜에서 🎜max🎜 사이의 주어진 범위 내에서. 문자열, 숫자, 배열 및 파일은 size🎜 메서드를 사용하여 계산됩니다. 🎜🎜🎜🎜🎜🎜🎜

boolean

검증된 필드는 부울 유형으로 변환 가능해야 합니다. 허용되는 입력은 true, false, 1, 0, "1", 및 "0". true, false, 1, 0, "1", 和 "0"

confirmed

验证字段必须具有匹配字段 foo_confirmation。例如,验证字段为 password ,输入中必须存在与之匹配的 password_confirmation 字段。

date

根据 PHP 函数 strtotime,验证字段必须是有效的日期。

date_equals:date

验证字段必须等于给定日期。日期将传递到 PHP 函数 strtotime

date_format:format

验证字段必须匹配给定的日期格式。当验证某个字段的时候,你应该 只使用 date 或者 date_format ,而不是同时使用。

different:field

验证字段必须具有与 field 不同的值。

digits:value

验证字段必须为 numeric ,且必须具有_value_的确切长度。

digits_between:min,max

验证的字段的长度必须在给定的  min 和  max 之间。

dimensions

验证中的文件必须是图片,并且符合指定的规则约束:

<?php
  namespace App\Providers;
  use Illuminate\Support\ServiceProvider;
  use Illuminate\Support\Facades\Validator;
  class AppServiceProvider extends ServiceProvider{   
      /**
     * 引导任何应用程序。
     *
     * @return void
     */   
  public function boot()   
   {       
     Validator::extend('foo', function ($attribute, $value, $parameters, $validator) { 
        return $value == 'foo';  
         });   
       }    
     /**
     * 注册服务提供器。
     *
     * @return void
     */   
     public function register()   
      {       
       //   
       }
     }

可用的约束为: min_width, max_width, min_height, max_height, width, height, ratio

ratio 限制应该表示为宽度除以高度。 这可以通过使用像 3/2 的表达式 或者一个浮点数,像 1.5 来指定:

Validator::extend('foo', 'FooValidator@validate');

由于此规则需要多个参数,你可以使用 Rule::dimensions

confirmed
확인 필드에는 foo_confirmation 필드와 일치해야 합니다. 예를 들어 유효성 검사 필드가 password 인 경우 일치하는 password_confirmation 필드가 입력에 있어야 합니다.

date

PHP 함수 strtotime에 따르면 유효성 검사는 필드는 유효한 날짜여야 합니다.

date_equals:날짜

확인 필드는 다음과 같아야 합니다. 주어진 설정 날짜와 동일합니다. 날짜는 PHP 함수 strtotime에 전달됩니다.

🎜🎜date_format:format🎜🎜확인 필드가 일치해야 합니다. 특정 날짜 형식. 필드 유효성을 검사할 때 date 또는 date_format 사용해야 하며 둘 다 사용할 수는 없습니다. 🎜🎜🎜🎜
🎜🎜 Different:field🎜🎜 유효성 검사 필드는 동일해야 합니다 >필드 다른 값. 🎜🎜🎜🎜
🎜🎜digits:value🎜🎜확인 필드는 다음과 같아야 합니다 숫자이며 정확한 길이가 _value_여야 합니다. 🎜🎜🎜🎜
🎜🎜digits_between:최소,최대🎜🎜확인할 필드의 길이는 주어진 minmax 사이에 있어야 합니다. 🎜🎜🎜🎜
🎜🎜dimensions🎜🎜확인 중인 파일은 이미지여야 하며 지정된 규칙 제약 조건을 준수해야 합니다. 🎜
"foo" => "Your input was invalid!",
"accepted" => "The :attribute must be accepted.",
// 其余的验证错误消息...
🎜사용 가능한 제약 조건은 min_width, max_width, min_height, max_height, width입니다. em >, , 비율. 🎜🎜비율 제한은 너비를 높이로 나눈 값으로 표현해야 합니다. 이는 3/2와 같은 표현식이나 1.5와 같은 부동 소수점 숫자를 사용하여 지정할 수 있습니다. 🎜
/**
 * 启动应用程序。
 *
 * @return void
 */
 public function boot(){  
   Validator::extend(...);    
   Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {    
       return str_replace(...);  
      });
 }
🎜이 규칙에는 여러 매개변수가 필요하므로 Rule을 사용할 수 있습니다. ::dimensions 메소드는 규칙을 유창하게 구성합니다. 🎜
$rules = ['name' => 'unique'];
$input = ['name' => null];
Validator::make($input, $rules)->passes();
 // true
🎜🎜🎜🎜🎜🎜🎜distinct🎜🎜배열의 유효성을 검사할 때 유효성 검사 필드에 중복된 값이 포함되어서는 안 됩니다. 🎜
Validator::extendImplicit('foo', function ($attribute, $value, $parameters, $validator) { 
   return $value == 'foo';
  });
🎜🎜🎜🎜🎜🎜🎜email🎜🎜확인 필드는 올바른 형식의 이메일 주소여야 합니다. 🎜🎜🎜🎜🎜🎜🎜

존재함:table,column

Validate 필드는 지정된 데이터베이스 테이블에 있어야 합니다.

Exists 규칙 기본 사용법

rrreee

column 옵션을 지정하지 않으면 필드 이름이 사용됩니다. column 选项,则将使用字段名称。

指定自定义的表字段

rrreee

有时,你可能需要指定要用于「exists」查询的特定数据库连接。你可以使用「点」语法将连接名称添加到表名称前来完成此操作:

rrreee

如果您想自定义验证规则执行的查询,您可以使用 Rule 类来流畅地定义规则。在下面的例子中,我们还以数组的形式指定验证规则,而不是使用 | 字符来分隔它们:

rrreee

file

验证的字段必须是成功上传的文件。

filled

验证字段存在时不得为空。

gt:field

验证字段必须大于给定的 field。两个字段必须是相同的类型。字符串、数字、数组和文件都使用 size 进行相同的评估。

gte:field

验证字段必须大于或等于给定的  field。两个字段必须是相同的类型。字符串、数字、数组和文件都使用 size 进行相同的评估。

image

验证的文件必须是图片 (jpeg, png, bmp, gif, 或 svg)

in:foo,bar,...

验证字段必须包含在给定的值列表中。由于此规则通常要求您 implode 数组,因此可以使用 Rule :: in

사용자 정의 테이블 필드 지정rrreee때때로 "존재" 쿼리에 사용할 특정 데이터베이스 연결을 지정해야 할 수도 있습니다. "점" 구문을 사용하여 테이블 이름에 연결 이름을 추가하면 됩니다.

rrreee
유효성 검사 규칙에 따라 수행되는 쿼리를 사용자 정의하려면 Rule 클래스를 사용하여 정의할 수 있습니다. 유창하게 지배합니다. 다음 예에서는 | 문자를 사용하여 구분하는 대신 배열 형식으로 유효성 검사 규칙을 지정합니다.
rrreee

< div name ="8c7dd9" data-unique="8c7dd9">

file확인된 필드는 성공적으로 업로드된 파일이어야 합니다.

filled

유효성 검사 필드가 있는 경우 비어 있으면 안 됩니다.

gt:

field

확인 필드는 지정된

field

보다 커야 합니다. . 두 필드는 모두 동일한 유형이어야 합니다. 문자열, 숫자, 배열 및 파일은 모두 크기를 사용하여 동일하게 평가됩니다.

gte:

field

유효성 검사 필드는 지정된 값보다 크거나 같아야 합니다.

필드

. 두 필드는 모두 동일한 유형이어야 합니다. 문자열, 숫자, 배열 및 파일은 모두 크기를 사용하여 동일하게 평가됩니다.

image
🎜확인된 파일은 이미지여야 합니다(jpeg, png, bmp, gif, 또는 svg)🎜🎜🎜🎜
🎜🎜in:🎜foo🎜,🎜bar🎜,...🎜🎜검증 필드는 지정된 값 목록에 포함되어야 합니다. 이 규칙에서는 일반적으로 배열을 implode해야 하므로 Rule::in 메서드를 사용하여 규칙을 유창하게 구성할 수 있습니다. 🎜rrreee🎜🎜🎜🎜🎜🎜🎜in_array :🎜anotherfield🎜 🎜🎜검증되는 필드는 다른 필드 🎜anotherfield🎜의 값 내에 존재해야 합니다. 🎜🎜🎜🎜🎜🎜🎜🎜integer🎜🎜확인할 필드는 정수여야 합니다. 🎜🎜🎜🎜🎜🎜🎜🎜ip🎜🎜확인할 필드는 IP 주소여야 합니다. 🎜🎜🎜🎜ipv4🎜🎜확인된 필드는 IPv4 주소여야 합니다. 🎜🎜🎜🎜ipv6🎜🎜확인된 필드는 IPv6 주소여야 합니다. 🎜🎜🎜🎜🎜🎜🎜

json

확인할 필드는 유효한 JSON 문자열이어야 합니다.

lt:field

유효성 검사의 필드는 지정된 필드보다 작아야 합니다. 두 필드는 모두 동일한 유형이어야 합니다. 문자열, 숫자, 배열 및 파일 크기는 size 메서드를 사용하여 계산되고 평가됩니다. size 方法进行评估。

lte:field

验证中的字段必须小于或等于给定的字段。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与  size  方法进行评估。

max:value

验证中的字段必须小于或等于 value。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估。

mimetypes:text/plain,...

验证的文件必须与给定 MIME 类型之一匹配:

rrreee

要确定上传文件的 MIME 类型,会读取文件的内容来判断 MIME 类型,这可能与客户端提供的 MIME 类型不同。

mimes:foo,bar,...

验证的文件必须具有与列出的其中一个扩展名相对应的 MIME 类型。

MIME 规则基本用法

rrreee

即使你可能只需要验证指定扩展名,但此规则实际上会验证文件的 MIME 类型,其通过读取文件的内容以猜测它的 MIME 类型。

可以在以下链接中找到完整的 MIME 类型列表及其相应的扩展名:
https://svn.apache.org/repos/asf/httpd/htt...

min:value

验证中的字段必须具有最小值。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估。

not_in:foo,bar,...

验证的字段不能包含在给定的值列表中。Rule::notIn

lte:
field
🎜🎜확인 중인 필드는 다음 값보다 작거나 같아야 합니다. 주어진 🎜 필드 🎜. 두 필드는 모두 동일한 유형이어야 합니다. 문자열, 숫자, 배열 및 파일 크기는 size 메서드를 사용하여 계산되고 평가됩니다. 🎜🎜🎜🎜
🎜🎜max:🎜value🎜🎜🎜확인 필드는 🎜value보다 작거나 같아야 합니다. 🎜. 문자열, 숫자, 배열 또는 파일 크기 계산은 size 메서드를 사용하여 평가됩니다. 🎜🎜🎜🎜
🎜🎜mimetypes:🎜text/plain🎜,...🎜🎜확인된 파일은 다음과 같아야 합니다. 주어진 것과 동일 지정된 MIME 유형 중 하나와 일치: 🎜rrreee🎜 업로드된 파일의 MIME 유형을 결정하려면 파일의 내용을 읽어서 MIME 유형을 결정합니다. 이는 업로드된 MIME 유형과 다를 수 있습니다. 고객. 🎜🎜🎜🎜
🎜🎜mimes:🎜foo🎜,🎜bar🎜,...🎜🎜확인된 문서가 필요합니다. 나열된 확장자 중 하나에 해당하는 MIME 유형이 있습니다. 🎜
🎜🎜MIME 규칙의 기본 사용법🎜rrreee🎜지정된 확장자만 확인하면 되더라도 이 규칙은 실제로 파일의 MIME 유형을 확인합니다. MIME 유형을 추측하기 위해 파일의 내용을 가져옵니다. 🎜🎜MIME 유형 및 해당 확장자의 전체 목록은 다음 링크에서 확인할 수 있습니다:
https://svn.apache.org/repos/asf/httpd/htt... 🎜🎜
🎜🎜
🎜🎜min:🎜value🎜🎜🎜확인 필드에는 최소값이 있어야 합니다. 문자열, 숫자, 배열 또는 파일 크기 계산은 size🎜 메서드를 사용하여 평가됩니다. 🎜🎜🎜🎜
🎜🎜not_in:🎜foo🎜,🎜bar🎜,...🎜🎜확인된 필드 지정된 값 목록에 포함될 수 없습니다. Rule::notIn 메소드를 사용하여 규칙을 작성할 수 있습니다: 🎜rrreee🎜🎜🎜🎜🎜🎜

not_regex:pattern

확인 중인 필드는 지정된 정규 표현식과 일치하지 않아야 합니다.

내부적으로 이 규칙은 PHP preg_match 함수를 사용합니다. 입력한 값은 preg_match 함수에 필요한 것과 동일한 형식을 따라야 하므로 유효한 구분 기호를 포함해야 합니다. 예: 'email' => 'not_regex:/^.+$/i'. preg_match 函数。输入的值应遵循 preg_match 函数所需的相同格式,因此也包括有效的分隔符。例如:'email' => 'not_regex:/^.+$/i'

注意: 当使用 regex/not_regex 模式时,可能需要在数组中指定规则,而不是使用管道分隔符,尤其是在正则表达式包含管道字符的情况下。

nullable

验证的字段可以为 null。这在验证基本数据类型时特别有用,例如可以包含空值的字符串和整数。

numeric

验证的字段必须是数字。

present

验证的字段必须存在于输入数据中,但可以为空。

regex:pattern

验证的字段必须与给定的正则表达式匹配。

在内部,此规则使用 PHP preg_match 函数。输入的值应遵循 preg_match 函数所需的相同格式,因此也包括有效的分隔符。例如:'email' => 'regex:/^.+@.+$/i'

注意: 当使用 regex 规则时,你必须使用数组,而不是使用 | 分隔符,特别是如果正则表达式包含 | 字符。

required

验证的字段必须存在于输入数据中,而不是空。如果满足以下条件之一,则字段被视为「空」:

  • 值为 null
  • 值为空字符串。
  • 值为空数组或空 Countable 对象。
  • 值为无路径的上传文件。

required_if:anotherfield,value,...

如果 anotherfield 字段等于任一 value,验证的字段必须出现且不为空 。

如果你想为 required_if 规则构造一个更复杂的条件,你可以使用 Rule::requiredIf 方法。此方法接受布尔值或闭包。当传递一个闭包时,应返回 truefalse

참고: regex/not_regex 패턴을 사용할 때 파이프 구분 기호를 사용하는 대신 배열에 규칙을 지정해야 할 수도 있습니다. , 특히 정규식에 파이프 문자가 포함된 경우입니다.

nullable🎜🎜확인된 필드는 null일 수 있습니다. 이는 null 값을 포함할 수 있는 문자열 및 정수와 같은 기본 데이터 유형의 유효성을 검사할 때 특히 유용합니다. 🎜🎜🎜🎜
🎜🎜numeric🎜🎜확인할 필드는 숫자여야 합니다. 🎜🎜🎜🎜
🎜🎜present🎜🎜검증되는 필드는 입력 데이터에 있어야 하지만 비어 있을 수 있습니다. 🎜🎜🎜🎜
🎜🎜regex:🎜pattern🎜🎜🎜검증되는 필드는 지정된 정규 표현식과 일치해야 합니다. 🎜🎜 내부적으로 이 규칙은 PHP preg_match 함수를 사용합니다. 입력한 값은 preg_match 함수에 필요한 것과 동일한 형식을 따라야 하므로 유효한 구분 기호를 포함해야 합니다. 예: '이메일' => 'regex:/^.+@.+$/i'. 🎜🎜참고: regex 규칙을 사용할 때 | 구분 기호를 사용하는 대신 배열을 사용해야 합니다. 특히 정규식에 <가 포함된 경우 < code>| 문자. 🎜🎜🎜🎜
🎜🎜required🎜🎜확인할 필드는 입력 데이터에 존재해야 하며 비어 있으면 안 됩니다. 다음 조건 중 하나가 충족되면 필드는 "null"로 간주됩니다. 🎜
  • 값은 null입니다.
  • 값이 빈 문자열입니다.
  • 값이 빈 배열이거나 빈 Countable 개체입니다.
  • 값은 경로 없이 업로드된 파일입니다.
🎜🎜
🎜🎜
🎜🎜required_if:🎜anotherfield🎜,🎜value🎜 ,...🎜🎜 🎜anotherfield🎜 필드가 임의의 🎜value🎜와 동일한 경우 검증된 필드가 있어야 하며 비어 있어서는 안 됩니다. 🎜🎜 required_if 규칙에 대해 더 복잡한 조건을 구성하려면 Rule::requiredIf 메서드를 사용할 수 있습니다. 이 메소드는 부울 값 또는 클로저를 허용합니다. 클로저를 전달할 때 true 또는 false를 반환하여 필드의 유효성을 검사해야 하는지 확인해야 합니다. 🎜rrreee🎜🎜🎜🎜🎜🎜

required_unless:anotherfield,value,...

anotherfield 필드가 어떤 value와도 같지 않으면 검증된 필드가 있어야 하며 비어 있어서는 안 됩니다.

required_with:foo,bar,...

검증된 필드가 나타나야 하며 다른 지정된 필드가 나타날 때만 비어 있으면 안 됩니다.

required_with_all:foo,bar,...

확인된 필드는 다른 모든 지정된 필드가 나타날 때만 나타나야 하며 비어 있으면 안 됩니다.

required_without:foo,bar,...

다른 지정된 필드가 표시되지 않는 경우에만 확인된 필드가 표시되어야 하며 비어 있지 않습니다.

required_without_all:foo,bar,...

확인된 필드는 다른 모든 지정된 필드가 표시되지 않는 경우에만 나타나야 하며 비어 있으면 안 됩니다.

동일:field

검증되는 필드는 지정된 필드와 일치해야 합니다.

size:value

검증되는 필드의 크기는 지정된 값과 일치해야 합니다. 문자열의 경우 값은 문자 수에 해당합니다. 숫자의 경우 값은 주어진 정수 값에 해당합니다. 배열의 경우 크기는 배열의 count 값에 해당합니다. 파일의 경우 크기는 파일 크기(KB)에 해당합니다. count 值。对于文件,size 对应文件大小(单位 kb)。

starts_with:foo,bar,...

验证的字段必须以给定值之一开头。

string

验证的字段必须是一个字符串。如果允许这个字段为 null,需要给这个字段分配 nullable 规则。

timezone

验证的字段必须是一个基于 PHP 函数  timezone_identifiers_list

starts_with:
foo
,🎜bar🎜,...🎜🎜확인된 필드 지정된 값 중 하나로 시작해야 합니다. 🎜🎜🎜🎜
🎜🎜string🎜🎜확인할 필드는 문자열이어야 합니다. 이 필드가 null이 되도록 허용된 경우 null 허용 규칙을 이 필드에 할당해야 합니다. 🎜🎜🎜🎜
🎜🎜timezone🎜🎜확인할 필드는 PHP 기반 함수여야 합니다. timezone_identifiers_list 유효한 시간대 식별자입니다. 🎜🎜🎜🎜🎜🎜🎜

unique: table, column, Except, idColumn

검증할 필드는 지정된 데이터베이스 테이블 내에서 고유해야 합니다. column을 지정하지 않으면 필드 자체의 이름이 사용됩니다. column ,将会使用字段本身的名称。

指定自定义字段

rrreee

自定义数据库连接

有时,你可能需要为验证程序创建的数据库查询设置自定义连接。上面的例子中,将 unique:users 设置为验证规则,等于使用默认数据库连接来查询数据库。如果要对其进行修改,请使用「点」方法指定连接和表名:

rrreee

强迫 Unique 规则忽略指定 ID :

有时,你可能希望在进行字段唯一性验证时忽略指定 ID 。例如, 在「更新个人资料」页面会包含用户名、邮箱和地点。这时你会想要验证更新的 E-mail 值是否唯一。如果用户仅更改了用户名字段而没有改 E-mail 字段,就不需要抛出验证错误,因为此用户已经是这个 E-mail 的拥有者了。

使用 Rule 类定义规则来指示验证器忽略用户的 ID。这个例子中通过数组来指定验证规则,而不是使用 | 字符来分隔:

rrreee

{tip} 您永远不应将任何用户控制的请求输入传递给 ignore 方法。相反,您应该只从 Eloquent 模型实例传递系统生成的唯一 ID,例如自增 ID 或 UUID。否则,您的应用程序将容易受到 SQL 注入攻击。

你可以传递整个模型实例,而不是将模型键的值传递给 ignore 方法。Laravel 将自动从模型中提取主键:

rrreee

如果你的数据表使用的主键名称不是 id ,那就在调用 ignore 方法时指定字段的名称:

rrreee

默认情况下,unique 规则将检查与要验证的属性的名称匹配的列是否唯一。但是你可以将不同的列名称作为第二个参数传递给 unique 方法:

rrreee

增加额外的 Where 语句:

你也可以通过 where 方法指定额外的查询条件。例如, 我们添加 account_id1

사용자 정의 필드 지정

rrreee사용자 정의 데이터베이스 연결

때때로 유효성 검사기가 생성한 데이터베이스 쿼리에 대한 사용자 정의 연결을 설정해야 할 수도 있습니다. 위의 예에서 unique:users를 유효성 검사 규칙으로 설정하는 것은 기본 데이터베이스 연결을 사용하여 데이터베이스를 쿼리하는 것과 같습니다. 이를 수정하려면 "점" 방법을 사용하여 연결 및 테이블 이름을 지정하십시오.
rrreee
특정 ID를 무시하도록 고유 규칙 강제:

때때로 다음을 원할 수도 있습니다. 지정된 ID를 무시할 때 필드의 고유성을 확인합니다. 예를 들어, "프로필 업데이트" 페이지에는 사용자 이름, 이메일 주소 및 위치가 포함됩니다. 이 시점에서는 업데이트된 이메일 값이 고유한지 확인해야 합니다. 사용자가 사용자 이름 필드만 변경하고 이메일 필드는 변경하지 않은 경우 사용자가 이미 이메일의 소유자이므로 유효성 검사 오류를 발생시킬 필요가 없습니다.

Rule 클래스를 사용하여 유효성 검사기에 사용자 ID를 무시하도록 지시하는 규칙을 정의하세요. 이 예에서는 | 문자를 사용하여 구분하는 대신 유효성 검사 규칙을 배열로 지정합니다.

rrreee

{tip} 사용자가 제어하는 ​​요청 입력을 ignore 메서드에 전달하면 안 됩니다. 대신 Eloquent 모델 인스턴스에서 자동 증가 ID 또는 UUID와 같은 시스템 생성 고유 ID만 전달해야 합니다. 그렇지 않으면 애플리케이션이 SQL 주입 공격에 취약해집니다.

모델 키 값을 ignore 메소드에 전달하는 대신 전체 모델 인스턴스를 전달할 수 있습니다. Laravel은 자동으로 모델에서 기본 키를 추출합니다:
rrreee
데이터 테이블이 id 이외의 기본 키 이름을 사용하는 경우 ignore 방법:

rrreee

기본적으로 unique 규칙은 검증 중인 속성의 이름과 일치하는 열이 고유한지 여부를 확인합니다. 하지만 다른 열 이름을 unique 메서드의 두 번째 인수로 전달할 수 있습니다.

rrreee

추가 Where 문 추가:

where 메소드는 추가 쿼리 조건을 지정합니다. 예를 들어 account_id1의 제약 조건으로 추가합니다. rrreee

url🎜🎜검증된 필드는 유효한 URL이어야 합니다. 🎜🎜🎜🎜🎜🎜🎜🎜uuid🎜🎜 유효성 검사 필드는 유효한 RFC 4122(버전 1,3,4 또는 5) UUID(범용 고유 식별자)여야 합니다. 🎜🎜🎜🎜🎜🎜🎜🎜조건에 따라 규칙 추가🎜🎜🎜

있는 경우 유효성 검사

경우에 따라 유효성 검사는 해당 필드가 배열에 있는 경우에만 필드에 대해 수행할 수 있습니다. 규칙 목록에 가끔을 추가하면 이 작업을 수행할 수 있습니다. sometimes 到规则列表来实现:

rrreee

在上面的例子中, email 字段只有在 $data 数组中存在才会被验证。

{tip} 如果你尝试验证应该始终存在但可能为空的字段,请查阅 可选字段的注意事项

复杂的条件验证

有时候你可能需要增加基于更复杂的条件逻辑的验证规则。例如,你可以希望某个指定字段在另一个字段的值超过 100 时才为必填。或者当某个指定字段存在时,另外两个字段才能具有给定的值。增加这样的验证条件并不难。首先,使用 静态规则 创建一个 Validator 实例:

rrreee

假设我们有一个专为游戏收藏家所设计的网页应用程序。如果游戏收藏家收藏超过一百款游戏,我们会希望他们来说明下为什么他们会拥有这么多游戏。比如说他们有可能经营了一家游戏分销商店,或者只是为了享受收集的乐趣。为了在特定条件下加入此验证需求,可以在 Validator 实例中使用 sometimes 方法。

rrreee

传入 sometimes 方法的第一个参数是要用来验证的字段名称。第二个参数是我们想使用的验证规则。 闭包 作为第三个参数传入,如果其返回 true , 则额外的规则就会被加入。这个方法可以轻松地创建复杂的条件验证。你甚至可以一次对多个字段增加条件验证:

rrreee

{tip} 传入 闭包$input 参数是 IlluminateSupportFluent 的一个实例,可用来访问你的输入或文件对象。

验证数组

验证表单的输入为数组的字段也不难。你可以使用 「点」方法来验证数组中的属性。例如,如果传入的 HTTP 请求中包含 photos[profile] 字段, 可以如下验证:

rrreee

你也可以验证数组中的每个元素。例如,要验证指定数组输入字段中的每一个 email 是唯一的,可以这么做:

rrreee

同理,你可以在语言文件定义验证信息时使用 *rrreee

위 예에서 email 필드는 $data에만 존재합니다. 배열이 확인됩니다.

{tip} 항상 존재해야 하지만 비어 있을 수 있는 필드의 유효성을 검사하려는 경우 선택 필드에 대한 참고 사항을 확인하세요.

< /blockquote>
복잡한 조건부 유효성 검사

때로는 더 복잡한 조건부 논리를 기반으로 유효성 검사 규칙을 추가해야 할 수도 있습니다. 예를 들어 다른 필드의 값이 100을 초과하는 경우에만 지정된 필드가 필수가 되도록 할 수 있습니다. 또는 지정된 필드가 존재하는 경우 다른 두 필드가 지정된 값을 가질 수 있습니다. 이러한 검증 조건을 추가하는 것은 어렵지 않습니다. 먼저 정적 규칙을 사용하여 Validator 인스턴스를 만듭니다.

rrreee 게임 수집가를 위해 설계된 웹 애플리케이션이 있다고 가정해 보겠습니다. 게임 수집가의 컬렉션에 100개 이상의 게임이 있는 경우, 왜 그렇게 많은 게임을 소유하고 있는지 설명하고 싶습니다. 예를 들어 게임 유통점을 운영할 수도 있고, 단순히 수집을 즐길 수도 있습니다. 특정 조건에서 이 유효성 검사 요구 사항을 추가하려면 Validator 인스턴스에서 sometimes 메서드를 사용할 수 있습니다. rrreee

sometimes 메소드에 전달된 첫 번째 매개변수는 유효성 검사에 사용되는 필드의 이름입니다. 두 번째 매개변수는 우리가 사용하려는 유효성 검사 규칙입니다. Closure가 세 번째 매개변수로 전달됩니다. true를 반환하면 추가 규칙이 추가됩니다. 이 방법을 사용하면 복잡한 조건부 유효성 검사를 쉽게 만들 수 있습니다. 한 번에 여러 필드에 조건부 유효성 검사를 추가할 수도 있습니다.
rrreee
{tip} 클로저에 전달된 $input 매개변수는 IlluminateSupportFluent입니다. 입력 또는 파일 객체에 액세스하는 데 사용할 수 있는 code>의 인스턴스입니다. 🎜
🎜🎜🎜
🎜🎜Validating arrays🎜🎜입력이 있는 필드의 유효성을 검사하는 것은 어렵지 않습니다. 양식은 배열입니다. "점" 메서드를 사용하여 배열의 속성을 확인할 수 있습니다. 예를 들어 수신 HTTP 요청에 photos[profile] 필드가 포함되어 있으면 다음과 같이 확인할 수 있습니다. 🎜rrreee🎜 배열의 각 요소를 확인할 수도 있습니다. 예를 들어 지정된 배열 입력 필드의 각 이메일이 고유한지 확인하려면 다음을 수행하면 됩니다. 🎜rrreee🎜마찬가지로 언어 파일에서 확인 정보를 정의할 때 * 문자를 사용할 수 있습니다. 배열을 기반으로 합니다. 필드에 단일 유효성 검사 메시지를 사용합니다. 🎜rrreee🎜🎜🎜🎜🎜🎜🎜사용자 정의 유효성 검사 규칙🎜🎜🎜🎜🎜🎜🎜

규칙 객체 사용

Laravel은 많은 유용한 유효성 검사 규칙을 제공하며 사용자 정의 규칙도 지원합니다. 사용자 정의 유효성 검사 규칙을 등록하는 한 가지 방법은 규칙 개체를 사용하는 것입니다. Artisan 명령어 make:rule를 사용하여 새로운 규칙 객체를 생성할 수 있습니다. 다음으로, 이 명령을 사용하여 문자열이 대문자인지 확인하는 규칙을 생성해 보겠습니다. Laravel은 app/Rules 디렉터리에 새 규칙을 저장합니다: make:rule 来生成新的规则对象。接下来,让我们用这个命令生成一个验证字符串是大写的规则。Laravel 会将新的规则存放在 app/Rules 目录中:

rrreee

一旦创建了规则,我们就可以定义它的行为。规则对象包含两个方法: passesmessagepasses 方法接收属性值和名称,并根据属性值是否符合规则而返回  truefalsemessage 方法应返回验证失败时应使用的验证错误消息:

rrreee

当然, 如果你希望从翻译文件中返回一个错误消息,你可以从 message 方法中调用辅助函数 trans

rrreee

一旦规则对象被定义好后,你可以通过将规则对象的实例和其他验证规则一起来传递给验证器:

rrreee

使用闭包

如果你在应用程序中只需要一次自定义规则的功能,则可以使用闭包而不是规则对象。闭包接收属性的名称,属性的值如果验证失败则应该使用回调中的 $fail

rrreee

使用扩展

注册自定义的验证规则的另一种方法是使用 Validator facade 中的 extend 方法。让我们在 服务容器 中使用这个方法来注册自定义验证规则:

rrreee

自定义的验证闭包接收四个参数:要被验证的属性名称 $attribute、属性的值 $value、传入验证规则的参数数组 $parameters 、以及 Validator 实列。

除了使用闭包,你也可以传入类和方法到 extend 方法中:

rrreee

定义错误消息

你还需要为自定义规则定义错误信息。你可以使用内联自定义消息数组或者在验证语言文件中添加条目来实现这一功能。 消息应该被放到数组的第一位, 而不是在只用于存放属性指定错误信息的 custom 数组内:

rrreee

当创建一个自定义验证规则时,你可能有时候需要为错误信息定义自定义占位符。可以通过创建自定义验证器然后调用 Validator 门面上的  replacer 方法。你可以在 服务容器 的 bootrrreee

규칙이 생성되면 해당 동작을 정의할 수 있습니다. 규칙 객체에는 passesmessage라는 두 가지 메서드가 포함되어 있습니다. passes 메소드는 속성 값과 이름을 수신하고 속성 값이 규칙을 준수하는지 여부에 따라 true 또는 false를 반환합니다. message 메소드는 유효성 검사가 실패할 경우 사용해야 하는 유효성 검사 오류 메시지를 반환해야 합니다.
rrreee
물론 번역 파일에서 오류 메시지를 반환하려면 < code>message
메서드 trans에서 도우미 함수 trans를 호출하세요. 🎜rrreee🎜규칙 객체가 정의되면 규칙 객체의 인스턴스를 다음에 전달할 수 있습니다. 다른 유효성 검사 규칙과 함께 유효성 검사기: 🎜rrreee🎜🎜
🎜🎜클로저를 사용하세요🎜🎜 애플리케이션에 사용자 정의 규칙 기능이 필요한 경우 규칙 객체 대신 클로저를 사용할 수 있습니다. 클로저는 속성의 이름을 수신합니다. 속성 값이 유효성 검사에 실패하면 콜백에서 $fail을 사용해야 합니다. 🎜rrreee🎜🎜
🎜🎜확장 프로그램 사용🎜🎜사용자 정의 유효성 검사 규칙을 등록하는 또 다른 방법은 검사기에서 extend를 사용하는 것입니다. 코드> 파사드 메소드. 이 방법을 사용하여 서비스 컨테이너에 사용자 정의 유효성 검사 규칙을 등록해 보겠습니다. 🎜rrreee🎜 사용자 정의 유효성 검사 클로저는 4개의 매개변수를 받습니다: 유효성을 검사할 속성 이름 $attribute, 속성 값 < code>$value, 유효성 검사 규칙에 전달된 매개변수 배열 $parametersValidator 실제 열입니다. 🎜🎜클로저를 사용하는 것 외에도 클래스와 메서드를 extend 메서드에 전달할 수도 있습니다. 🎜rrreee
🎜

정의 오류 메시지

🎜사용자 정의 규칙에 대한 오류 메시지도 정의해야 합니다. 인라인 사용자 정의 메시지 배열을 사용하거나 유효성 검사 언어 파일에 항목을 추가하여 이 기능을 구현할 수 있습니다. 메시지는 속성별 오류 메시지를 저장하는 데만 사용되는 custom 배열이 아닌 배열에 먼저 배치되어야 합니다. 🎜rrreee🎜사용자 정의 유효성 검사 규칙을 생성할 때 때때로 사용자 정의 자리 표시자가 필요할 수 있습니다. 오류 메시지에 대해 정의됩니다. 이는 사용자 정의 유효성 검사기를 생성한 다음 Validator 파사드에서 Replacer 메서드를 호출하여 수행할 수 있습니다. 서비스 컨테이너의 boot 메소드에서 다음 작업을 수행할 수 있습니다: 🎜rrreee🎜🎜

암시적 확장

기본적으로 유효성을 검사할 속성이 존재하지 않거나 requiredrequired 规则定义的空值时,那么正常的验证规则,包括自定义扩展将不会执行。 例如,unique 规则将不会检验 null 值:

rrreee

如果要求即使为空时也要验证属性,则必须要暗示属性是必须的。要创建这样一个「隐式」扩展, 可以使用 Validator::extendImplicit() 규칙에 정의된 null 값을 포함하는 경우 사용자 지정 확장을 포함한 일반적인 유효성 검사 규칙이 구현되지 않습니다. 예를 들어, unique

규칙은 null 값을 검증하지 않습니다.
rrreee

속성을 검증해야 하는 경우에도 null 이면 속성이 필수라는 것을 의미해야 합니다. 이러한 "암시적" 확장을 만들려면 Validator::extendImplicit() 메서드를 사용하세요.

rrreee
이 글은
LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜