Doğrulayıcı

composer, doğrudan kullanılabilecek birçok doğrulayıcı içerir, örneğin:

top-think/think-validate

respect/validation

Doğrulayıcı top-think/think-validate

Açıklama

ThinkPHP resmi doğrulayıcısıdır.

Proje Adresi

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

Kurulum

composer require topthink/think-validate

Hızlı Başlangıç

Yeni bir app/index/validate/User.php oluşturun

<?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' => 'İsim gerekli',
        'name.max'     => 'İsim en fazla 25 karakter uzunluğunda olmalıdır',
        'age.number'   => 'Yaş bir sayı olmalıdır',
        'age.between'  => 'Yaş 1 ile 120 arasında olmalıdır',
        'email'        => 'E-posta formatı hatalı',    
    ];

}

Kullanım

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

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

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

Dikkat
webman içinde think-validate'in Validate::rule() metodu desteklenmemektedir.

Doğrulayıcı workerman/validation

Açıklama

Proje, https://github.com/Respect/Validation'ın Türkçe çevirisidir.

Proje Adresi

https://github.com/walkor/validation

Kurulum

composer require workerman/validation

Hızlı Başlangıç

<?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('Takma ad'),
            'username' => v::alnum()->length(5, 64)->setName('Kullanıcı adı'),
            'password' => v::length(5, 64)->setName('Şifre')
        ]);
        Db::table('user')->insert($data);
        return json(['code' => 0, 'msg' => 'tamam']);
    }
}  

jquery ile erişim

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

Elde edilen sonuç:

{"code":500,"msg":"Kullanıcı adı yalnızca harf (a-z) ve rakam (0-9) içerebilir"}

Açıklama:

v::input(array $input, array $rules) , verileri doğrulamak ve toplamak için kullanılır, veri doğrulaması başarısız olursa Respect\Validation\Exceptions\ValidationException istisnası fırlatır, doğrulama başarılı olursa doğrulanmış verileri (dizi) döndürür.

Eğer iş kodu doğrulama istisnasını yakalamazsa, webman çerçevesi otomatik olarak bunu yakalar ve HTTP istek başlığına göre JSON verisi (benzer {"code":500, "msg":"xxx"}) veya normal bir hatalı sayfa döndürür. Eğer geri dönüş formatı iş ihtiyaçlarını karşılamıyorsa, geliştirici ValidationException istisnasını kendisi yakalayarak ihtiyaç duyulan veriyi geri döndürebilir, aşağıdaki örneğe benzer:

<?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('Kullanıcı adı'),
                'password' => v::length(5, 64)->setName('Şifre')
            ]);
        } catch (ValidationException $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()]);
        }
        return json(['code' => 0, 'msg' => 'tamam', 'data' => $data]);
    }
}

Validator Fonksiyon Rehberi

use Respect\Validation\Validator as v;

// Tek kural doğrulama
$number = 123;
v::numericVal()->validate($number); // true

// Zincirleme birden fazla kural doğrulama
$usernameValidator = v::alnum()->noWhitespace()->length(1, 15);
$usernameValidator->validate('alganet'); // true

// İlk doğrulama hatası nedenini alma
try {
    $usernameValidator->setName('Kullanıcı adı')->check('alg  anet');
} catch (ValidationException $exception) {
    echo $exception->getMessage(); // Kullanıcı adı yalnızca harf (a-z) ve rakam (0-9) içerebilir
}

// Tüm doğrulama hatası nedenlerini alma
try {
    $usernameValidator->setName('Kullanıcı adı')->assert('alg  anet');
} catch (ValidationException $exception) {
    echo $exception->getFullMessage();
    // Aşağıdakileri yazdıracaktır
    // -  Kullanıcı adı aşağıdaki kurallara uymalıdır
    //     - Kullanıcı adı yalnızca harf (a-z) ve rakam (0-9) içerebilir
    //     - Kullanıcı adı boşluk içeremez

    var_export($exception->getMessages());
    // Aşağıdakileri yazdıracaktır
    // array (
    //   'alnum' => 'Kullanıcı adı yalnızca harf (a-z) ve rakam (0-9) içerebilir',
    //   'noWhitespace' => 'Kullanıcı adı boşluk içeremez',
    // )
}

// Özelleştirilmiş hata mesajı
try {
    $usernameValidator->setName('Kullanıcı adı')->assert('alg  anet');
} catch (ValidationException $exception) {
    var_export($exception->getMessages([
        'alnum' => 'Kullanıcı adı yalnızca harf ve rakamlardan oluşabilir',
        'noWhitespace' => 'Kullanıcı adı boşluk içeremez',
        'length' => 'Uzunluk uygun, bu nedenle bu mesaj görünmeyecek'
    ]));
    // Aşağıdakileri yazdıracaktır 
    // array(
    //    'alnum' => 'Kullanıcı adı yalnızca harf ve rakamlardan oluşabilir',
    //    'noWhitespace' => 'Kullanıcı adı boşluk içeremez'
    // )
}

// Doğrulama nesnesi
$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

// Dizi doğrulama
$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); // check() veya validate() da kullanılabilir

// Opsiyonel doğrulama
v::alpha()->validate(''); // false 
v::alpha()->validate(null); // false 
v::optional(v::alpha())->validate(''); // true
v::optional(v::alpha())->validate(null); // true

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

Validator'ın üç metodu validate() check() assert() arasındaki fark

validate() boolean döner, istisna fırlatmaz

check() doğrulama başarısız olduğunda istisna fırlatır, $exception->getMessage() ile ilk doğrulama hatası nedenini alırsınız

assert() doğrulama başarısız olduğunda istisna fırlatır, $exception->getFullMessage() ile tüm doğrulama hataları nedenlerini alırsınız

Yaygın Doğrulama Kuralı Listesi

Alnum() sadece harf ve rakam içerir

Alpha() sadece harf içerir

ArrayType() dizi türü

Between(mixed $minimum, mixed $maximum) girişi diğer iki değer arasında doğrular.

BoolType() boolean türünde olup olmadığını doğrular

Contains(mixed $expectedValue) girişin belirli bir değeri içerip içermediğini doğrular

ContainsAny(array $needles) girişin tanımlı bir değeri en az bir kez içerip içermediğini doğrular

Digit() girişin yalnızca rakamlardan oluşup oluşmadığını doğrular

Domain() geçerli bir alan adı olup olmadığını doğrular

Email() geçerli bir e-posta adresi olup olmadığını doğrular

Extension(string $extension) uzantıyı doğrular

FloatType() ondalık türünde olup olmadığını doğrular

IntType() tam sayı olup olmadığını doğrular

Ip() ip adresi olup olmadığını doğrular

Json() json verisi olup olmadığını doğrular

Length(int $min, int $max) uzunluğun belirli bir aralıkta olup olmadığını doğrular

LessThan(mixed $compareTo) uzunluğun verilen değerden küçük olup olmadığını doğrular

Lowercase() küçük harf mi olduğunu doğrular

MacAddress() mac adresi olup olmadığını doğrular

NotEmpty() boş olup olmadığını doğrular

NullType() null olup olmadığını doğrular

Number() sayısal olup olmadığını doğrular

ObjectType() nesne türünde olup olmadığını doğrular

StringType() dizi türünde olup olmadığını doğrular

Url() url olup olmadığını doğrular

Daha fazla doğrulama kuralı için bkz. https://respect-validation.readthedocs.io/en/2.0/list-of-rules/

Daha Fazla İçerik

Ziyaret edin https://respect-validation.readthedocs.io/en/2.0/