Validator

Composer bietet viele Validatoren, die direkt verwendet werden können, zum Beispiel:

top-think/think-validate

respect/validation

Validator top-think/think-validate

Beschreibung

Offizieller Validator von ThinkPHP

Projektadresse

https://github.com/top-think/think-validate

Installation

composer require topthink/think-validate

Schnellstart

Erstellen Sie app/index/validate/User.php

<?php
namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    protected $rule =   [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',    
    ];

    protected $message  =   [
        'name.require' => 'Name ist erforderlich',
        'name.max'     => 'Der Name darf maximal 25 Zeichen lang sein',
        'age.number'   => 'Das Alter muss eine Zahl sein',
        'age.between'  => 'Das Alter muss zwischen 1 und 120 liegen',
        'email'        => 'Ungültiges E-Mail-Format',    
    ];

}

Verwendung

$data = [
    'name'  => 'thinkphp',
    'email' => 'thinkphp@qq.com',
];

$validate = new \app\index\validate\User;

if (!$validate->check($data)) {
    var_dump($validate->getError());
}

Hinweis
In Webman wird die Methode Validate::rule() von think-validate nicht unterstützt.

Validator workerman/validation

Beschreibung

Das Projekt ist die chinesische Version von https://github.com/Respect/Validation

Projektadresse

https://github.com/walkor/validation

Installation

composer require workerman/validation

Schnellstart

<?php
namespace app\controller;

use support\Request;
use Respect\Validation\Validator as v;
use support\Db;

class IndexController
{
    public function index(Request $request)
    {
        $data = v::input($request->post(), [
            'nickname' => v::length(1, 64)->setName('Spitzname'),
            'username' => v::alnum()->length(5, 64)->setName('Benutzername'),
            'password' => v::length(5, 64)->setName('Passwort')
        ]);
        Db::table('user')->insert($data);
        return json(['code' => 0, 'msg' => 'ok']);
    }
}  

Zugriff über jQuery

  $.ajax({
      url : 'http://127.0.0.1:8787',
      type : "post",
      dataType:'json',
      data : {nickname:'汤姆', username:'tom cat', password: '123456'}
  });

Erhalten Sie das Ergebnis:

{"code":500,"msg":"Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten"}

Erläuterung:

v::input(array $input, array $rules) wird verwendet, um Daten zu validieren und zu sammeln. Wenn die Datenvalidierung fehlschlägt, wird die Ausnahme Respect\Validation\Exceptions\ValidationException ausgelöst. Bei erfolgreicher Validierung wird das validierte Datenarray zurückgegeben.

Wenn der Geschäftscode die Validierungsanomalie nicht abfängt, fängt das Webman-Framework sie automatisch ab und wählt basierend auf dem HTTP-Anforderungsheader aus, ob JSON-Daten (ähnlich {"code":500, "msg":"xxx"}) oder eine reguläre Fehlermeldung zurückgegeben werden. Wenn das Rückgabeformat nicht den Geschäftsanforderungen entspricht, können Entwickler die ValidationException-Ausnahme selbst abfangen und die erforderlichen Daten zurückgeben, ähnlich dem folgenden Beispiel:

<?php
namespace app\controller;

use support\Request;
use Respect\Validation\Validator as v;
use Respect\Validation\Exceptions\ValidationException;

class IndexController
{
    public function index(Request $request)
    {
        try {
            $data = v::input($request->post(), [
                'username' => v::alnum()->length(5, 64)->setName('Benutzername'),
                'password' => v::length(5, 64)->setName('Passwort')
            ]);
        } catch (ValidationException $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()]);
        }
        return json(['code' => 0, 'msg' => 'ok', 'data' => $data]);
    }
}

Validator Funktionsanleitung

use Respect\Validation\Validator as v;

// Einzelne Regelvalidierung
$number = 123;
v::numericVal()->validate($number); // true

// Mehrere Regeln in einer Kettenvalidierung
$usernameValidator = v::alnum()->noWhitespace()->length(1, 15);
$usernameValidator->validate('alganet'); // true

// Erhalten Sie den Grund für das erste Validierungsfehler
try {
    $usernameValidator->setName('Benutzername')->check('alg  anet');
} catch (ValidationException $exception) {
    echo $exception->getMessage(); // Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten
}

// Erhalten Sie alle Gründe für die Validierungsfehler
try {
    $usernameValidator->setName('Benutzername')->assert('alg  anet');
} catch (ValidationException $exception) {
    echo $exception->getFullMessage();
    // Es wird gedruckt
    // -  Benutzername muss den folgenden Regeln entsprechen
    //     - Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten
    //     - Benutzername darf keine Leerzeichen enthalten

    var_export($exception->getMessages());
    // Es wird gedruckt
    // array (
    //   'alnum' => 'Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten',
    //   'noWhitespace' => 'Benutzername darf keine Leerzeichen enthalten',
    // )
}

// Benutzerdefinierte Fehlermeldung
try {
    $usernameValidator->setName('Benutzername')->assert('alg  anet');
} catch (ValidationException $exception) {
    var_export($exception->getMessages([
        'alnum' => 'Benutzername darf nur Buchstaben und Zahlen enthalten',
        'noWhitespace' => 'Benutzername darf keine Leerzeichen enthalten',
        'length' => 'Die Länge entspricht den Anforderungen, daher wird diese nicht angezeigt'
    ]));
    // Es wird gedruckt 
    // array(
    //    'alnum' => 'Benutzername darf nur Buchstaben und Zahlen enthalten',
    //    'noWhitespace' => 'Benutzername darf keine Leerzeichen enthalten'
    // )
}

// Objektvalidierung
$user = new stdClass;
$user->name = 'Alexandre';
$user->birthdate = '1987-07-01';
$userValidator = v::attribute('name', v::stringType()->length(1, 32))
                ->attribute('birthdate', v::date()->minAge(18));
$userValidator->validate($user); // true

// Array-Validierung
$data = [
    'parentKey' => [
        'field1' => 'value1',
        'field2' => 'value2',
        'field3' => true,
    ]
];
v::key(
    'parentKey',
    v::key('field1', v::stringType())
        ->key('field2', v::stringType())
        ->key('field3', v::boolType())
    )
    ->assert($data); // kann auch check() oder validate() verwenden

// Optionale Validierung
v::alpha()->validate(''); // false 
v::alpha()->validate(null); // false 
v::optional(v::alpha())->validate(''); // true
v::optional(v::alpha())->validate(null); // true

// Negativregel
v::not(v::intVal())->validate(10); // false

Unterschiede zwischen den drei Validator-Methoden validate(), check(), assert()

validate() gibt einen booleschen Wert zurück und wirft keine Ausnahmen

check() wirft eine Ausnahme, wenn die Validierung fehlschlägt, und gibt mit $exception->getMessage() den Grund für die erste Validierungsfehler zurück

assert() wirft eine Ausnahme, wenn die Validierung fehlschlägt und ermöglicht, alle Gründe für die Validierungsfehler mit $exception->getFullMessage() zu erhalten

Häufig verwendete Validierungsregeln

Alnum() enthält nur Buchstaben und Zahlen

Alpha() enthält nur Buchstaben

ArrayType() Arraytyp

Between(mixed $minimum, mixed $maximum) validiert, ob der Eingabewert zwischen anderen zwei Werten liegt.

BoolType() validiert, ob es sich um einen booleschen Wert handelt

Contains(mixed $expectedValue) validiert, ob die Eingabe bestimmten Werten enthält

ContainsAny(array $needles) validiert, ob die Eingabe mindestens einen definierten Wert enthält

Digit() validiert, ob die Eingabe nur Zahlen enthält

Domain() validiert, ob es sich um einen gültigen Domainnamen handelt

Email() validiert, ob es sich um eine gültige E-Mail-Adresse handelt

Extension(string $extension) validiert die Dateiendung

FloatType() validiert, ob es sich um einen Gleitkommawert handelt

IntType() validiert, ob es sich um eine Ganzzahl handelt

Ip() validiert, ob es sich um eine IP-Adresse handelt

Json() validiert, ob es sich um JSON-Daten handelt

Length(int $min, int $max) validiert, ob die Länge im angegebenen Bereich liegt

LessThan(mixed $compareTo) validiert, ob die Länge kleiner als ein gegebener Wert ist

Lowercase() validiert, ob es sich um Kleinbuchstaben handelt

MacAddress() validiert, ob es sich um eine MAC-Adresse handelt

NotEmpty() validiert, ob es nicht leer ist

NullType() validiert, ob es null ist

Number() validiert, ob es sich um eine Zahl handelt

ObjectType() validiert, ob es sich um ein Objekt handelt

StringType() validiert, ob es sich um eine Zeichenkette handelt

Url() validiert, ob es sich um eine URL handelt

Weitere Validierungsregeln finden Sie unter https://respect-validation.readthedocs.io/en/2.0/list-of-rules/

Mehr Inhalte

Besuchen Sie https://respect-validation.readthedocs.io/en/2.0/