>php教程 >PHP开发 >Laravel 프레임워크 양식 유효성 검사 자세한 설명

Laravel 프레임워크 양식 유효성 검사 자세한 설명

高洛峰
高洛峰원래의
2016-12-27 10:55:331334검색

기본 검증 예시

$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => 'required|min:5')
);

make 함수에 전달되는 첫 번째 매개변수는 검증할 데이터이고, 두 번째 매개변수는 데이터에 적용해야 하는 검증 규칙입니다.

여러 유효성 검사 규칙은 "|" 문자로 구분하거나 배열의 단일 요소로 구분할 수 있습니다.

배열을 통해 유효성 검사 규칙 지정

$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => array('required', 'min:5'))
);

Validator 인스턴스가 생성되면 실패(또는 통과) 기능을 사용하여 이 유효성 검사를 수행할 수 있습니다.

if ($validator->fails())
{
// The given data did not pass validation
}

검증에 실패하면 검증기에서 오류 메시지를 받을 수 있습니다.

$messages = $validator->messages();

failed 함수를 사용하면 오류 메시지 없이 유효성 검사에 실패한 규칙 배열을 가져올 수도 있습니다.

$failed = $validator->failed();

파일 유효성 검사

Validator 클래스는 크기, MIME 등과 같은 파일 유효성을 검사하기 위한 몇 가지 유효성 검사 규칙을 제공합니다. 파일의 유효성을 검사할 때 다른 유효성 검사와 마찬가지로 유효성 검사기에 파일을 전달할 수 있습니다.

오류 메시지 포함

Validator 인스턴스에서 메시지 기능을 호출하면 오류 메시지 처리를 위한 편리한 기능이 많이 포함된 MessageBag 인스턴스가 생성됩니다.

도메인에 대한 첫 번째 오류 메시지 가져오기

echo $messages->first('email');

도메인에 대한 모든 오류 메시지 가져오기

foreach ($messages->get('email') as $message)
{
//
}

모든 도메인에 대한 모든 오류 메시지 가져오기

foreach ($messages->all() as $message)
{
//
}

도메인에 대한 메시지가 있는지 확인

if ($messages->has('email'))
{
//
}

특정 형식의 오류 메시지 받기

echo $messages->first(&#39;email&#39;, &#39;<p>:message</p>&#39;);

참고: 기본적으로 메시지는 호환되는 형식으로 사용됩니다. 형식화를 위한 부트스트랩 구문을 사용합니다.

특정 형식으로 모든 오류 메시지 가져오기

  foreach ($messages->all(&#39;<li>:message</li>&#39;) as $message)
  {
  //
  }

오류 메시지 및 보기

검증을 수행한 후에는 오류를 보기에 다시 보고할 수 있는 쉬운 방법이 필요합니다. 정보. 이는 Lavavel에서 쉽게 처리할 수 있습니다. 다음 경로를 예로 들어 보겠습니다.

Route::get(&#39;register&#39;, function()
{
return View::make(&#39;user.register&#39;);
});
Route::post(&#39;register&#39;, function()
{
$rules = array(...);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
{
return Redirect::to(&#39;register&#39;)->withErrors($validator);
}
});

검증이 실패하면 withErrors 함수를 사용하여 Validator 인스턴스를 Redirect에 전달합니다. 이 함수는 세션에 저장된 오류 메시지를 새로 고쳐 다음 요청 시 사용할 수 있도록 합니다.


그러나 GET 경로의 경로에 오류 메시지를 명시적으로 바인딩할 필요는 없습니다. 이는 Laravel이 항상 세션에 오류가 있는지 확인하고 오류가 있으면 자동으로 뷰에 바인딩하기 때문입니다. 따라서 모든 요청에 ​​대해 $errors 변수는 항상 모든 보기에서 사용할 수 있으므로 $errors가 항상 정의되어 사용하기에 안전하다고 편리하게 가정할 수 있습니다. $errors 변수는 MessageBag 클래스의 인스턴스가 됩니다.

따라서 점프 후 뷰에서 자동으로 바인딩된 $errors 변수를 사용할 수 있습니다.

<?php echo $errors->first(&#39;email&#39;); ?>

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

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

Accepted
 Active URL
 After (Date)
 Alpha
 Alpha Dash
 Alpha Numeric
 Before (Date)
 Between
 Confirmed
 Date
 Date Format
 Different
 E-Mail
 Exists (Database)
 Image (File)
 In
 Integer
 IP Address
 Max
 MIME Types
 Min
 Not In
 Numeric
 Regular Expression
 Required
 Required If
 Required With
 Required Without
 Same
 Size
 Unique (Database)

accepted

유효성 검사 이 규칙의 값은 yes, on 또는 1이어야 합니다. 이는 서비스 약관에 대한 동의 여부를 확인할 때 유용합니다.

active_url

PHP 함수 checkdnsrr에 따라 이 규칙의 값이 유효한 URL이어야 하는지 확인합니다.

after:date

이 규칙의 값이 PHP 함수 strtotime을 통해 전달되는 지정된 날짜 이후여야 하는지 확인합니다.

alpha
이 규칙의 값이 모두 알파벳 문자로 구성되어야 하는지 확인합니다.

alpha_dash
이 규칙의 값이 문자, 숫자, 대시 또는 밑줄 문자로만 구성되어야 하는지 확인합니다.

alpha_num
이 규칙을 검증하는 값은 문자와 숫자로만 구성되어야 합니다.

before:date
이 규칙의 값이 지정된 날짜 이전이어야 하는지 확인하고 날짜는 PHP 함수 strtotime을 통해 전달됩니다.

between:min,max
  이 규칙의 값이 지정된 최소값과 최대값 사이에 있어야 하는지 확인합니다. 문자열, 숫자, 파일은 크기 규칙을 사용하여 비교됩니다.

confirmed
이 유효성 검사 규칙의 값은 foo_confirmation의 값과 동일해야 합니다. 예를 들어, 이 규칙에 대해 유효성을 검사해야 하는 필드가 비밀번호인 경우 입력에 동일한 비밀번호_확인 필드가 있어야 합니다.

date
PHP 함수 strtotime에 따라 이 규칙의 값이 유효한 날짜인지 확인합니다.

date_format:format
이 규칙의 값이 PHP 함수 date_parse_from_format에 따라 지정된 형식의 형식을 준수해야 하는지 확인합니다.

다른:필드
  이 규칙의 값이 지정된 필드의 값과 달라야 하는지 확인합니다.

이메일
이 규칙의 값이 유효한 이메일 주소인지 확인하세요.

exists:table,column
이 규칙의 값이 지정된 데이터베이스의 테이블에 존재해야 하는지 확인하세요.

Exists 규칙의 기본은

&#39;state&#39; => &#39;exists:states&#39;

열 이름 지정

&#39;state&#39; => &#39;exists:states,abbreviation&#39;

을 사용하는 것입니다. 또한 더 많은 조건을 지정할 수도 있습니다. "어디" 쿼리 형식입니다.

&#39;email&#39; => &#39;exists:staff,email,account_id,1&#39;

image
이 규칙을 확인하는 값은 이미지(jpeg, png, bmp 또는 gif)여야 합니다.

in:foo,bar,...

이 규칙의 값이 지정된 목록에 있어야 하는지 확인합니다.

정수

이 규칙의 값이 정수여야 하는지 확인합니다.


이 규칙의 값이 유효한 IP 주소여야 하는지 확인하세요.

max:value

  이 규칙의 값이 최대값보다 작아야 하는지 확인합니다. 문자열, 숫자, 파일은 크기 규칙을 사용하여 비교됩니다.

Mimes:foo,bar,...

이 규칙의 유효성을 검사할 파일의 MIME 유형이 지정된 목록에 있어야 합니다.

  MIME 规则的基础使用

&#39;photo&#39; => &#39;mimes:jpeg,bmp,png&#39;

min:value
  验证此规则的值必须大于最小值 value。字符串、数字以及文件都将使用大小规则进行比较。

not_in:foo,bar,...

  验证此规则的值必须在给定的列表中不存在。

numeric

  验证此规则的值必须是一个数字。

regex:pattern

  验证此规则的值必须符合给定的正则表达式。

  注意: 当使用 regex 模式的时候,有必要使用数组指定规则,而不是管道分隔符,特别是正则表达式中包含一个管道字符的时候。

required

  验证此规则的值必须在输入数据中存在。

required_if:field,value

  当指定的域为某个值的时候,验证此规则的值必须存在。

required_with:foo,bar,...

  仅当指定的域存在的时候,验证此规则的值必须存在。

required_without:foo,bar,...

  仅当指定的域不存在的时候,验证此规则的值必须存在。

same:field

  验证此规则的值必须与给定域的值相同。

size:value

验证此规则的值的大小必须与给定的 value 相同。对于字符串,value 代表字符的个数;对于数字,value 代表它的整数值,对于文件,value 代表文件以KB为单位的大小。

unique:table,column,except,idColumn

验证此规则的值必须在给定的数据库的表中唯一。如果 column 没有被指定,将使用该域的名字。

Unique 规则的基础使用

&#39;email&#39; => &#39;unique:users&#39;
指定列名
&#39;email&#39; => &#39;unique:users,email_address&#39;
强制忽略一个给定的 ID
&#39;email&#39; => &#39;unique:users,email_address,10&#39;

url

  验证此规则的值必须是一个合法的 URL。

  定制错误消息

  如果有需要,您可以使用定制的错误消息代替默认的消息。这里有好几种定制错误消息的方法。

  传递定制消息到验证器

$messages = array(
 &#39;required&#39; => &#39;The :attribute field is required.&#39;,
 );
 $validator = Validator::make($input, $rules, $messages);

注意: :attribute 占位符将被实际的进行验证的域的名字代替,您也可以在错误消息中使用其他占位符。

其他验证占位符

  $messages = array(
  &#39;same&#39; => &#39;The :attribute and :other must match.&#39;,
  &#39;size&#39; => &#39;The :attribute must be exactly :size.&#39;,
  &#39;between&#39; => &#39;The :attribute must be between :min - :max.&#39;,
  &#39;in&#39; => &#39;The :attribute must be one of the following types: 
:values&#39;,
  );

  有些时候,您可能希望只对一个指定的域指定定制的错误消息:

  对一个指定的域指定定制的错误消息

$messages = array(
&#39;email.required&#39; => &#39;We need to know your e-mail address!&#39;,
);

在一些情况下,您可能希望在一个语言文件中指定错误消息而不是直接传递给 Validator。为了实现这个目的,请在 app/lang/xx/validation.php 文件中添加您的定制消息到 custom 数组。

在语言文件中指定错误消息

&#39;custom&#39; => array(
&#39;email&#39; => array(
&#39;required&#39; => &#39;We need to know your e-mail address!&#39;,
),
),

定制验证规则

Laravel 提供了一系列的有用的验证规则;但是,您可能希望添加自己的验证规则。其中一种方法是使用 Validator::extend 函数注册定制的验证规则:

注册一个定制的验证规则

Validator::extend(&#39;foo&#39;, function($attribute, $value, $parameters)
{
return $value == &#39;foo&#39;;
});

注意: 传递给 extend 函数的规则的名字必须符合 "snake cased" 命名规则。

  定制的验证器接受三个参数:待验证属性的名字、待验证属性的值以及传递给这个规则的参数。

  您也可以传递一个类的函数到 extend 函数,而不是使用闭包:

  Validator::extend(&#39;foo&#39;, &#39;FooValidator@validate&#39;);

  注意您需要为您的定制规则定义错误消息。您既可以使用一个行内的定制消息数组,也可以在验证语言文件中进行添加。

  您也可以扩展 Validator 类本身,而不是使用闭包回调扩展验证器。为了实现这个目的,添加一个继承自 Illuminate\Validation\Validator 的验证器类。您可以添加在类中添加以 validate 开头的验证函数:

扩展验证器类

<?php
class CustomValidator extends Illuminate\Validation\Validator {
public function validateFoo($attribute, $value, $parameters)
{
return $value == &#39;foo&#39;;
}
}

下面,您需要注册定制的验证器扩展:

您需要注册定制的验证器扩展

Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});

  当创建一个定制的验证规则,您有时需要为错误消息定义一个定制的占位符。为了实现它,您可以像上面那样创建一个定制的验证器,并且在验证器中添加一个 replaceXXX 函数:

protected function replaceFoo($message, $attribute, $rule, $parameters)
{
return str_replace(&#39;:foo&#39;, $parameters[0], $message);
}

更多Laravel框架表单验证详解相关文章请关注PHP中文网!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.