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'inValidate::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/