Heim >php教程 >PHP开发 >Ausführliche Erklärung zur Formularvalidierung des Laravel-Frameworks

Ausführliche Erklärung zur Formularvalidierung des Laravel-Frameworks

高洛峰
高洛峰Original
2016-12-27 10:55:331334Durchsuche

Einfaches Verifizierungsbeispiel

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

Der erste an die Make-Funktion übergebene Parameter sind die zu verifizierenden Daten, und der zweite Parameter ist die Verifizierungsregel, die auf die Daten angewendet werden muss.

Mehrere Validierungsregeln können durch das Zeichen „|“ oder als einzelnes Element eines Arrays getrennt werden.

Validierungsregeln über Array angeben

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

Sobald eine Validator-Instanz erstellt wurde, können Sie die Funktion „Fails“ (oder „Passes“) verwenden, um diese Validierung durchzuführen.

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

Wenn die Validierung fehlschlägt, erhalten Sie möglicherweise eine Fehlermeldung vom Validator.

$messages = $validator->messages();

Sie können auch die Funktion failed verwenden, um ein Array von Regeln abzurufen, deren Validierung ohne Fehlermeldung fehlgeschlagen ist.

$failed = $validator->failed();

Dateivalidierung

Die Validator-Klasse stellt einige Validierungsregeln zum Validieren von Dateien bereit, wie z. B. Größe, Mimes usw. Wenn Sie eine Datei validieren, können Sie sie wie jede andere Validierung an den Validator übergeben.

Mit Fehlermeldung

Nach dem Aufruf der Nachrichtenfunktion auf einer Validator-Instanz erhalten Sie eine MessageBag-Instanz, die über viele praktische Funktionen zur Behandlung von Fehlermeldungen verfügt.

Erste Fehlermeldung für eine Domain abrufen

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

Alle Fehlermeldungen für eine Domain abrufen

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

Alle Fehlermeldungen für alle Domains abrufen

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

Überprüfen Sie, ob eine Nachricht für eine Domain vorhanden ist

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

Erhalten Sie eine Fehlermeldung in einem bestimmten Format

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

Hinweis: Standardmäßig wird die Nachricht kompatibel verwendet mit Bootstrap-Syntax zur Formatierung.

Alle Fehlermeldungen in einem bestimmten Format abrufen

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

Fehlermeldungen und Ansichten

Sobald Sie die Validierung durchgeführt haben, benötigen Sie eine einfache Möglichkeit, Fehler an die Ansicht zurückzumelden Information. Dies kann in Lavavel problemlos gehandhabt werden. Nehmen Sie als Beispiel die folgende Route:

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);
}
});

Beachten Sie, dass wir bei fehlgeschlagener Validierung die Funktion „withErrors“ verwenden, um die Validator-Instanz an Redirect zu übergeben. Diese Funktion aktualisiert die in der Sitzung gespeicherte Fehlermeldung, sodass sie bei der nächsten Anfrage verfügbar ist.


Beachten Sie jedoch, dass wir die Fehlermeldung nicht explizit an die Route in der GET-Route binden müssen. Dies liegt daran, dass Laravel die Sitzung immer auf Fehler überprüft und diese automatisch an die Ansicht bindet, sofern sie verfügbar sind. Daher ist für jede Anfrage in allen Ansichten immer eine Variable „$errors“ verfügbar, sodass Sie bequem davon ausgehen können, dass „$errors“ immer definiert und sicher zu verwenden ist. Die Variable $errors ist eine Instanz der MessageBag-Klasse.

Nach dem Sprung können Sie also die automatisch gebundene Variable $errors in der Ansicht verwenden:

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

Verfügbare Validierungsregeln

Hier ist eine Liste aller verfügbaren Regeln Validierungsregeln und ihre Funktionen:

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)

akzeptiert

Validierung Der Wert dieser Regel muss Ja, Ein oder 1 sein. Dies ist nützlich, wenn Sie die Zustimmung zu den Nutzungsbedingungen überprüfen möchten.

active_url

Überprüft, ob der Wert dieser Regel gemäß der PHP-Funktion checkdnsrr eine gültige URL sein muss.

after:date

Überprüft, dass der Wert dieser Regel nach dem angegebenen Datum liegen muss, das über die PHP-Funktion strtotime übergeben wird.

Alpha
Überprüfen Sie, ob der Wert dieser Regel vollständig aus alphabetischen Zeichen bestehen muss.

alpha_dash
Überprüfen Sie, ob der Wert dieser Regel vollständig aus Buchstaben, Zahlen, Bindestrichen oder Unterstreichungszeichen bestehen muss.

alpha_num
Der Wert, der diese Regel validiert, muss vollständig aus Buchstaben und Zahlen bestehen.

before:date
Validiert, dass der Wert dieser Regel vor dem angegebenen Datum liegen muss. Das Datum wird über die PHP-Funktion strtotime übergeben.

between:min,max
  Überprüft, ob der Wert dieser Regel zwischen dem angegebenen Minimum und Maximum liegen muss. Zeichenfolgen, Zahlen und Dateien werden anhand von Größenregeln verglichen.

confirmed
Der Wert dieser Validierungsregel muss mit dem Wert von foo_confirmation übereinstimmen. Wenn das Feld, das für diese Regel validiert werden muss, beispielsweise „password“ ist, muss in der Eingabe ein identisches Feld „password_confirmation“ vorhanden sein.

Datum
Validiert, dass der Wert dieser Regel ein gültiges Datum gemäß der PHP-Funktion strtotime sein muss.

date_format:format
Validiert, dass der Wert dieser Regel dem Format des angegebenen Formats gemäß der PHP-Funktion date_parse_from_format entsprechen muss.

different:field
  Überprüft, ob sich der Wert dieser Regel vom Wert des angegebenen Felds unterscheiden muss.

E-Mail
Überprüfen Sie, ob der Wert dieser Regel eine gültige E-Mail-Adresse sein muss.

exists:table,column
Stellen Sie sicher, dass der Wert dieser Regel in der Tabelle der angegebenen Datenbank vorhanden sein muss.

Die Grundlage der Exists-Regel ist die Verwendung von

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

Geben Sie den Spaltennamen an

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

Sie können auch weitere Bedingungen angeben, die in hinzugefügt werden Form der „Wo“-Abfrage.

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

Bild
Der Wert, der diese Regel validiert, muss ein Bild (JPEG, PNG, BMP oder GIF) sein.

in:foo,bar,...

Überprüft, ob der Wert dieser Regel in der angegebenen Liste vorhanden sein muss.

Ganzzahl

Überprüfen Sie, ob der Wert dieser Regel eine Ganzzahl sein muss.


Stellen Sie sicher, dass der Wert dieser Regel eine gültige IP-Adresse sein muss.

max:value

Überprüfen Sie, ob der Wert dieser Regel kleiner als der Maximalwert sein muss. Zeichenfolgen, Zahlen und Dateien werden anhand von Größenregeln verglichen.

Mimes:foo,bar,...

Der MIME-Typ der Datei, anhand derer diese Regel validiert wird, muss in der angegebenen Liste enthalten sein.

  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中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn