Menü
ücretsiz
Kayıt
Ev  /  problemler/ Pervasız doğrulama php. Onaylandı, onaylandı... ve onaylandı! PHP'de Veri Doğrulayıcıları Karşılaştırma

Pervasız doğrulama php. Onaylandı, onaylandı... ve onaylandı! PHP'de Veri Doğrulayıcıları Karşılaştırma

Form gönderim verilerini daha fazla işlenmek üzere almadan önce formunuzdaki girdilerin doğrulanması çok önemlidir. Formda birçok alan olduğunda, PHP doğrulama komut dosyası çok karmaşık hale gelir. Yaptığınız formların çoğu için aynı veya benzer doğrulamayı yaptığınız için, form doğrulamalarına çok fazla yinelenen çaba harcanır.

Bu genel PHP form doğrulama betiği hakkında

Bu genel PHP form doğrulayıcı komut dosyası, formunuza doğrulama eklemeyi çok kolaylaştırır.

Formdaki her öğeyle bir dizi "doğrulama tanımlayıcısı" oluşturup ilişkilendiriyoruz. "Doğrulama tanımlayıcısı", gerçekleştirilecek doğrulama türünü belirten bir dizedir. Örneğin, "req" gerekli anlamına gelir, "alfa" yalnızca alfabetik karakterlere izin verilmesi anlamına gelir vb.

Formdaki her alan sıfır, bir veya daha fazla doğrulamaya sahip olabilir. Örneğin, giriş boş olmamalı, 25 karakterden az olmalı, alfanümerik olmalı vb.

Formdaki her giriş alanı için bir dizi doğrulama tanımlayıcısı ilişkilendirebilirsiniz.

PHP form doğrulama komut dosyasını indirin

PHP form doğrulama komut dosyasını aşağıdan indirebilirsiniz:
Zip dosyası, form doğrulama betiği formvalidator.php, belgeler ve kullanım örneklerini içerir.

PHP form doğrulama komut dosyasını kullanma

  1. formvalidator.php'yi form işleme betiğinize dahil edin
  2. require_once "formvalidator.php"
  3. Bir FormValidator nesnesi oluşturun ve form doğrulama tanımlayıcılarını ekleyin.
  4. $doğrulayıcı = yeni FormValidator(); $validator->addValidation("Ad","req","Lütfen Adı girin"); $validator->addValidation("Email","email", "E-posta girişi geçerli bir e-posta değeri olmalıdır"); $validator->addValidation("Email","req","Lütfen E-postayı doldurun");

    İlk bağımsız değişken, formdaki giriş alanının adıdır. İkinci argüman, gerekli doğrulamanın türünü söyleyen doğrulama tanımlayıcısıdır. Üçüncü bağımsız değişken, doğrulama başarısız olursa görüntülenecek hata mesajıdır.

  5. ValidateForm() işlevini çağırarak formu doğrulayın
  6. if(!$validator->ValidateForm()) ( yankı " Doğrulama Hataları:"; $error_hash = $validator->GetErrors(); foreach($error_hash as $inpname => $inp_err) ( echo "

    $inpname: $inp_err

    \N"; ) )

örnek

Aşağıdaki örnek fikri daha net hale getirecektir

addValidation("Ad","req","Lütfen Adı girin"); $validator->addValidation("Email","email", "E-posta girişi geçerli bir e-posta değeri olmalıdır"); $validator->addValidation("Email","req","Lütfen E-postayı doldurun"); if($validator->ValidateForm()) ( yankı "

Doğrulama Başarılı!

"; $show_form=false; ) başka ( yankı " Doğrulama Hataları:"; $error_hash = $validator->GetErrors(); foreach($error_hash as $inpname => $inp_err) ( echo "

$inpname: $inp_err

\n"; ) ) ) if(true == $show_form) ( ?>

İsim: E-posta:

Özel Doğrulama Ekleme

Doğrulama tanımlayıcıları tarafından sağlanmayan özel bir doğrulama eklemek isterseniz bunu yapabilirsiniz. İşte adımlar:

  1. Özel doğrulama için bir sınıf oluşturun ve DoValidate() işlevini geçersiz kılın
  2. class MyValidator, CustomValidator'ı genişletir ( function DoValidate(&$formars,&$error_hash) ( if(stristr($formars["Comments"],"http://")) ( $error_hash["Comments"]="URL'lere izin verilmez) yorumlarda"; false döndür; ) true döndür; ))

  3. Özel doğrulama nesnesini ekleyin
  4. $doğrulayıcı = yeni FormValidator(); $validator->addValidation("Ad","req","Lütfen Adı girin"); $validator->addValidation("Email","email", "E-posta girişi geçerli bir e-posta değeri olmalıdır"); $validator->addValidation("Email","req","Lütfen E-postayı doldurun"); $custom_validator = new MyValidator(); $validator->AddCustomValidator($custom_validator);

Özel doğrulama işlevi, diğer doğrulamalardan sonra otomatik olarak çağrılacaktır.

Doğrulama Tanımlayıcıları Tablosu

Tüm doğrulama tanımlayıcılarının listesi aşağıdadır:

Doğrulama Tanımlayıcısıkullanım
istekAlan boş olmamalıdır
maxlen=???Girilen verilerin uzunluğunu maksimuma kadar kontrol eder. Örneğin, izin verilen maksimum boyut 25 ise doğrulama tanımlayıcısını "maxlen=25" olarak verin.
minlen=???girilen dizenin uzunluğunu gerekli minimumda kontrol eder. örnek "minlen=5"
mezunAlfabetik veya sayısal karakterlerden başka karakterler içerip içermediğini kontrol edin.
mezun_sYalnızca alfabetik, sayısal ve boşluk karakterlerine izin verir
sayıSayısal verileri kontrol edin
alfaAlfabetik verileri kontrol edin.
alfa_sAlfabetik verileri kontrol edin ve boşluklara izin verin.
e-postaAlan bir e-posta alanıdır ve verilerin geçerliliğini doğrular.
lt=???
daha az=???
Verilerin iletilen değerden küçük olduğunu doğrulayın. Yalnızca sayısal alanlar için geçerlidir.
örnek: değerin 1000'den küçük olması gerekiyorsa doğrulama açıklamasını “lt=1000” olarak verin
gt=???
daha büyük=???
Verilerin iletilen değerden büyük olduğunu doğrulayın. Yalnızca sayısal alanlar için geçerlidir.
örnek: değerin 10'dan büyük olması gerekiyorsa doğrulama açıklamasını "gt=10" olarak verin
normal ifade=???Bir normal ifadeyle kontrol edin, değer normal ifadeyle eşleşmelidir.
örnek: “regexp=^(1,20)$” 20 adede kadar alfabetik karaktere izin verir.
seçme=??Bu doğrulama tanımlayıcısı, seçili giriş öğeleri (listeler) içindir. Normalde, seçim listesi kutularında 'Birini Seç' yazan bir öğe bulunur. Kullanıcı bu seçenek dışında bir seçenek seçmelidir. Eğer değer Bu seçeneğin "Birini Seçin", doğrulama açıklamasının "dontselect=Birini Seçin" olması gerekir
seçim yapmaBu doğrulama tanımlayıcısı, onay kutuları içindir. Kullanıcı verilen onay kutusunu seçmemelidir. Sağlamak değer yerine onay kutusunun ??
Örneğin,dontselectchk=açık
mustselchkBu doğrulama tanımlayıcısı, onay kutuları içindir. Kullanıcı verilen onay kutusunu seçmelidir. yerine onay kutusunun değerini sağlayın ??
Örneğin, shouldselchk=açık
seçme radyoBu doğrulama tanımlayıcısı radyo düğmeleri içindir. Kullanıcı verilen radyo düğmesini seçmemelidir. ?? yerine radyo düğmesinin değerini girin.
Örneğin, dontselectradio=NO
radyo seçBu doğrulama tanımlayıcısı radyo düğmeleri içindir. Kullanıcı verilen radyo düğmesini seçmelidir. ?? yerine radyo düğmesinin değerini girin.
Örneğin, radyo seç=yes
selmin=??Bir onay kutusu grubundan en az n sayıda onay kutusu seçin.
Örneğin: selmin=3
yalnızBir radyo grubunu zorunlu kılar. Kullanıcı, radyo grubundan en az bir öğe seçmelidir.
eqelmnt=???formdaki iki öğeyi karşılaştırın ve değerlerin aynı olduğundan emin olun. Örneğin, 'password' ve 'confirm password'. ??? diğer giriş öğesinin adıyla.
Örneğin: eqelmnt=confirm_pwd

Bir önceki makalede, kendi kitaplığımın mevcut diğer çözümlerle karşılaştırmasını yazacağıma söz vermiştim, bu yüzden bugün Aura.Filter , Respect Validation , Sirius Validation ve Valitron kullanarak doğrulamaya bakacağız.


Kullanıcıların kaydedilmesini içeren, geliştirilmekte olan bir kamu hizmetimiz olduğunu düşünelim. tam erişim tüm işlevlere. Böylece, kayıt formu aşağıdaki alanları içerecektir:

  1. isim.İlki kullanıcının adı ve ikincisi soyadı olmak üzere tam olarak iki kelime içermelidir.
  2. giriş yapmak. Bir değer iletilirse, yalnızca latin harfleri, kısa çizgiler ve alt çizgiler içermelidir.
  3. e-posta Geçerli bir adres içermelidir E-posta.
  4. şifre. Yüklenmeli ve 64 karakterden uzun olmamalıdır.
  5. kabul. Kullanıcının hizmet şartlarını kabul ettiğini onaylamak için işaretlemesi gereken tipik bir onay kutusu.

Bu nedenle, kullanıcının hayali hizmetimize kaydolması için doldurması gereken beş alanımız var. Girdi olarak tamamen geçersiz veriler aldığımızı düşünelim:


$data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" =>

Aura.Filtre

Aura.Filter kullanarak doğrulama, bir filtre fabrikasıyla başlar. Tek bir değeri değil, bir diziyi doğrulayacağımız için sözde bir "konu filtresi" oluşturmamız gerekiyor.

kuralları tanımlama

Aura\Filter\FilterFactory'yi kullanın; $filter = (yeni FilterFactory)->newSubjectFilter(); $filter->validate("ad") ->isNotBlank() ->is("two_words") ->setMessage("Ad iki kelimeden oluşmalıdır."); $filter->validate("login") ->isBlankOr("alnum") ->setMessage("Bir oturum belirtirseniz, sadece latin karakterleri içermelidir."); $filter->validate("email") ->isNotBlank() ->is("email") ->setMessage("Lütfen geçerli bir email adresi giriniz."); $filter->validate("şifre") ->isNotBlank() ->is("strlenMax", 64) ->setMessage("Lütfen bir şifre giriniz."); $filter->validate("kabul edildi") ->is("geri arama", function($subject, $field) ( return $subject->($field) === true; )->setMessage("İhtiyacınız var) hizmet şartlarını kabul ediyorum.");

Gördüğünüz gibi, kuralların açıklaması oldukça basit. Aura.Filter kullanıma hazır bir dizi yararlı kural sağlar ve bunlardan bazıları yukarıdaki örnekte kullanılmıştır:

  1. isNotBlank yöntemi. Alanın boş olamayacağını belirtir.
  2. mezun Bu kural sadece latin harflere izin verir.
  3. e-posta Ve çok net :)
  4. strlenMax. Alanın, is yönteminin ikinci bağımsız değişkeni tarafından belirtilen uzunluğu aşamayacağını belirtir.
  5. geri çağırmak. Bu tür bir kural, Kontrolio'daki kapatmalara benzer. Bir kuralı kapanış olarak tanımlamanıza izin verir. Aura.Filter bu kapatmaya, formdaki veri dizimiz olan "konu" ve bu durumda kararlaştırılan bir alan iletir.

Two_words kuralını belirtmediğimi fark etmişsinizdir. Doğal olarak Aura.Filter'da böyle bir kural yok, bu yüzden onu oluşturmamız gerekiyor. Belgelerin dediği gibi, bu, kural için ayrı bir sınıfla yapılır:


/** * Kullanıcı adını doğrulayan kural. * Kullanıcı adı iki kelimeden oluşur: ad ve soyadı, bir boşlukla ayrılmış. */ class UserNameRule ( /** * Kullanıcı adını doğrular. * * @param nesne|array $subject * @param string $field * @param int $max * * @return bool */ public function __invoke($subject, $field , $max = null) ( $value = $subject->($field); if (! is_scalar($value)) ( return false; ) return (bool) preg_match("/^+\s+$/u", $değer); ) )

İkinci adım, filtre fabrikasına yeni kuralımız hakkında bilgi vermektir. İlk bağımsız değişkeni bir kurallar dizisi olarak filtre fabrikasına ileterek yapılır:


Bir sonraki adım, Aura.Filter'a yeni bir kural oluşturduğumuzu ve onu kullanmak istediğimizi bildirmektir. Bu, ilk fabrika bağımsız değişkenine bir dizi kural iletilerek yapılır:


Aura\Filter\FilterFactory'yi kullanın; $rules = [ "two_words" => function() ( yeni KullanıcıAdıKuralını döndür; ) ]; $filter = (yeni FilterFactory($rules))->newSubjectFilter();

Artık iki_kelime kuralımız, standart dağıtımdaki diğer herhangi bir kural gibi kullanılabilir.

Geri bildirim

Hatırlayacağınız gibi, doğruladığımız girdi verileri tamamen geçersiz çünkü her alan yanlış bir değer içeriyor veya hiç içermiyor. Bu nedenle, doğrulama sonucunda hatalar ve bunlarla ilgili ilgili mesajlar alacağımız varsayılmaktadır.


Aura.Filter ile şu şekilde doğrulama yapıyoruz:


$geçerli = $filter->uygula($veri); if (! $valid) ( $failures = $filter->getFailures(); $messages = $failures->getMessages(); )

İÇİNDE $mesajları bir dizi yazılır, bu nedenle mesajları görüntülemek için iç içe iki foreach gerekir:


    $hatalar) ( foreach ($hata as $hata) ( printf("", $hata); ) ) ?>

Doğrulamaya Saygı

Karşılaştırma için kullandığım ikinci kitaplık, Respect Validation adlı nispeten popüler bir çözümdür. İnsanlar ona güvendiği için orada görülecek bir şey olduğunu düşünüyorum.


Deneyin saflığı için, kitaplıkları karşılaştırırken, başlangıçta tanımlanan veri setinin aynısını kullanacağız:


v olarak Saygı\Doğrulama\Doğrulayıcı kullanın; $data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" => "" // Hiç şifre yok // Kullanıcı kutuyu işaretlemediği için "kabul edildi" dizide yok ];

kuralları tanımlama

Aura.Filter'da olduğu gibi, kullanıcı adı için kendi doğrulama kuralımıza ihtiyacımız var, o yüzden bununla başlayalım:


ad alanı MyNamespace; Respect\Validation\Rules\AbstractRule'u kullanın; class UserNameRule, AbstractRule'u genişletir ( genel işlev valide($input) ( dönüş (bool) preg_match("/^+\s+$/u", $input); ) )

Harici kurallar API'si, Aura.Filter ile neredeyse aynıdır, yalnızca yöntem doğrulamak() sihir yerine __çağırmak(). Bana bu API daha basit ve anlaşılır göründü. Eh, Kontrolio'ya daha yakın :)


Dokümantasyonda bundan bahsetmedim, ancak kuralın kendisine ek olarak, onun için kendi istisna türünü oluşturmak gerekiyor. İstisna sınıf adı, kural sınıfı adından ve bir son ekten oluşmalıdır. İstisna.


Respect\Validation\Exceptions\NestedValidationException kullanın; class UserNameRuleException, NestedValidationException'ı genişletir ( // )

Son olarak, verilerimizi doğrulayabiliriz. İlk olarak, yeni kuralımızı doğrulayıcıya iletiyoruz ki o bunu bilsin, böylece gelecekte kullanabiliriz. Saygı Doğrulama'da bu, yöntemi çağırarak yapılır. ile() standart dışı kuralların bulunduğu ad alanının aktarımı ile.


v::with("İsimAlanım\\");

Artık ad alanında bulunan tüm standart dışı kurallar benim adımalanım, doğrulayıcı tarafından "tanımlanacaktır". Bir sonraki adım, gerekli kuralları tanımlamak ve doğrulama yapmaktır.


v::attribute("name", v::userNameRule()) ->attribute("login", v::alnum("-_")) ->attribute("email", v::email()) ->attribute("şifre", v::notEmpty()->stringType()->uzunluk(null, 64)) ->attribute("agreed", v::trueVal()) ->assert((nesne) $veri);

Kuralımızı özniteliğe nasıl uyguladığımıza dikkat edin isim. Burada kural sınıfının adı doğrulayıcı yöntemin adına dönüştürülmüştür. Genel olarak kuralların geri kalanı sezgiseldir.


Ayrı olarak, diziyi neden getirdiğimizi belirtmekte fayda var. $veri nesneye. Gerçek şu ki, Respect Validation girdi olarak dizileri değil nesneleri alır. Bu kütüphane kullanılarak geliştirme yapılırken bu dikkate alınmalıdır.

Geri bildirim

Aura.Filter'dan farklı olarak Respect doğrulayıcı, doğrulama başarısız olduğunda bir istisna atar. Ve bu istisna, doğrulama hata mesajları içerir. Bu nedenle, az önce gösterilen örnek aşağıdaki gibi yazılmalıdır:


deneyin ( v::with("RespectValidationExample\\"); v::attribute("ad", v::userNameRule()) ->attribute("login", v::alnum("-_")) - >attribute("email", v::email()) ->attribute("şifre", v::notEmpty()->stringType()->uzunluk(null, 64)) ->attribute("kabul edildi", v::trueVal()) ->assert((object) $data); ) catch (NestedValidationException $ex) ( $messages = $ex->getMessages(); )

kullanma getMessage(), doğrulayıcının doğrulama işlemi sırasında topladığı tüm mesajların düz bir dizisini alacağız. Bir diziyi dump ederek şöyle bir şey elde ederiz:


array(5) ( => string(29) "%s için veri doğrulaması başarısız oldu" => string(60) "oturum açma sadece harfler (a-z), rakamlar (0-9) ve "-_" => string içermelidir (25) "email must be valid email" => string(26) "password must not be empty" => string(32) "Kabul edilen özellik mevcut olmalı" )

Mesajları kendinize göre değiştirebilirsiniz. Belki bir şekilde bu kütüphaneyi yanlış anladım, ancak bu süreç bana çok açık gelmedi: yöntemi kullanmanız gerekiyor iletileri bul() iletileri nitelikler için değil, kurallar için tanımladığınız işlenmiş bir istisna üzerinde.


$ex->findMessages([ "userNameRule" => "Kullanıcı adı iki kelimeden oluşmalıdır.", "alnum" => "Kullanıcı adınızı beğenmedik.", "email" => "Belli ki istemiyorsunuz bize e-posta adresinizi verin.", "notEmpty" => "Şifreniz nerede?", "agreed" => "Üzgünüz, kabul etmiyorsunuz." ]);

Hatanın ne olduğunu bilmiyorum ama hala anlamadığım birkaç şey var. Kuralları yukarıdaki şekilde tanımlayarak elde ettiğimiz şey budur:


array(5) ( => string(40) "Kullanıcı adı iki kelime olmalıdır." => string(31) "Kullanıcı adınızı beğenmedik." => string(25) "e-posta geçerli bir e-posta olmalı" => string(5) "Şifreniz nerede?" => string(9) "Üzgünüz, kabul etmiyorsunuz." )

Gördüğünüz gibi, e-posta alanı mesajı uygulanmadı, standart olan kaldı. Ancak 4. indeksin arkasındaki mesaj tam tersidir! Ve bu, kuralın adını değil, alanın adını kullanmama rağmen. Oysa kuralın adını (trueVal) kullanırsam mesajım bir yerlerde kaybolurdu. Yorumlar deneyimli kullanıcılar bu kütüphane çok hoş geldiniz.

Sirius Doğrulaması

Tamam, bir sonraki kitaplığa geçelim ve benzer görevleri nasıl yerine getirdiğini görelim.

kuralları tanımlama

Yine kullanıcı adı için bir kural tanımlamamız gerekiyor. Bunun gibi bir şey yazacağız:


class UserNameRule, AbstractRule'u genişletir ( // Hata mesajları const MESSAGE = "Kullanıcı adı iki kelime olmalıdır."; const LABELED_MESSAGE = "(etiket) iki kelime olmalıdır."; public function valide($value, $valueIdentifier = null ) ( dönüş ( bool) preg_match("/^+\s+$/u", $değer); ) )

Halihazırda ele alınan kitaplıklarla karşılaştırıldığında yaklaşımlardaki farklılıklara dikkat edin. Özellikler, yöntemler veya kural bağımsız değişkenleri kullanmak yerine sabitlerde iki tür mesaj tanımlarız.


Şimdi doğrulama mantığını açıklayalım:


$doğrulayıcı = yeni Doğrulayıcı; $validator ->add("name", "gerekli | Uygulamam\Validation\Rule\UserNameRule") ->add("login", "gerekli | alphanumhyphen", null, "Giriş yalnızca latin harfleri, kısa çizgiler ve alt çizgiler içerebilir. ") ->add("email", "gerekli | email", null, "Lütfen geçerli bir e-posta giriniz.") ->add("şifre", "gerekli | maxlength(64)", null, "Sizin şifre efendim.") ->add("katılıyorum", "gerekli | eşittir(doğru)", null, "Neden kabul etmediniz?");

Gördüğünüz gibi, kurallar dizisi oldukça basit ve okunabilir. Açıklamalar için yatay çizgilerle ayrılmış adlar kullanıyoruz. Bu yaklaşım, Laravel ve Kontrolio tarafından kullanılana benzer.


Dördüncü yöntem argümanı eklemek() doğrulama başarısız olursa Sirius'un kullandığı doğrulama hatası mesajını açıklar. Yeni kuralımız için neden bir mesaj eklemedik? KullanıcıAdıKural?


$validator->add("ad", "gerekli | Uygulamam\Doğrulama\Kural\KullanıcıAdıRule")

Bunun nedeni, mesajların zaten sınıf sabitlerinde tanımlanmış olmasıdır:


class UserNameRule, AbstractRule'u genişletir ( // Hata mesajları const MESSAGE = "Kullanıcı adı iki kelimeden oluşmalıdır."; ...

Başka bir seçenek de doğrulayıcının kendisinin addMessage() yöntemini kullanmaktır:


$validator->addMessage("email", "Lütfen geçerli bir e-mail giriniz.");

Kontrolio'da bir takma ad/takma ad ayarlayabilirken, özel kuralların sınıflarının tam adıyla tanımlandığını unutmayın.

Geri bildirim

Doğrulama yapmak için doğrulayıcı yöntemini çağırıyoruz doğrulamak(), verileri ona iletmek:


$data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" => "" // Hiç şifre yok // Kullanıcı kutuyu işaretlemediği için "kabul edildi" dizide yok ]; $doğrulayıcı->doğrula($veri);

Saygının aksine, Sirius bir istisna atmaz, sadece geri döner YANLIŞ. Doğrulama hata mesajları, doğrulayıcı yöntemi aracılığıyla alınabilir getMessage(). Özniteliğe göre gruplandırılmış hatalar döndürür, bu nedenle hataları yinelemek için iki foreach döngüsüne ihtiyacımız var:


foreach ($validator->getMessages() as $attribute => $messages) ( foreach ($messages as $message) ( echo $message->getTemplate() . "\n"; ) )

Burada $message bir sınıf nesnesidir Sirius\Doğrulama\HataMesajı bir yöntemi olan getTemplate(), bu da ihtiyacımız olan mesajı döndürür.

Valitron

kuralları tanımlama

İlk fark, yeni bir kural eklemek için ayrı bir sınıf oluşturmanıza gerek olmamasıdır. Basitçe bir boole sonucu döndüren bir kapatma kullanabilirsiniz.


Valitron'a özel kurallar eklemek için statik bir yöntem vardır. ekRule(), burada ilk iki bağımsız değişken gereklidir ve üçüncüsü isteğe bağlıdır. Bu yöntemi beğendim çünkü burada kural tanımlayıcı, mantık ve hata mesajı aynı anda tek bir yerde gösteriliyor.


Valitron\Validator'ı kullanın; Validator::addRule("two_words", function($field, $value) ( ​​​​return (bool) preg_match("/^+\s+$/u", $value); ), "Kullanıcı adı tam olarak iki kelime olmalıdır) .");

İkinci fark, kuralların niteliklere nasıl uygulandığıdır. Önceki tüm durumlarda, bir niteliğin adeta birincil bir şey olduğunu gördük.


Valitron diğer tarafa gitti ve doğrulama kurallarını ilk sıraya koydu. Kuralları tanımlayarak, bu kurallara nitelikler uygularsınız ve bunun tersi olmaz.


$doğrulayıcı = yeni Doğrulayıcı($veri); $validator ->rule("two_words", "name")->label("") ->rule("gerekli", [ "isim", "giriş", "e-posta", "şifre", "kabul edildi" ] ) ->rule("bilgi", "giriş") ->rule("email", "email") ->rule("kabul edildi", "kabul edildi");

Örnekte de görebileceğiniz gibi, yöntemde kural()önce kuralın adını yazıyoruz ve ancak o zaman bu kuralla eşleşmesi gereken nitelikleri belirtiyoruz. Daha açık bir örnek, özniteliklerin kurala nasıl "ait" olduğunu gösteren zorunlu kuraldır.


Valitron (incelediğimiz diğer çözümler gibi) standart hata mesajları sağlar. Sadece bunları kullanırsanız, her mesajın karşılık gelen özelliğin adıyla başladığını göreceksiniz.


Valitron, standart olmayan hata mesajları kullanıldığında bile mesaj metnindeki öznitelik adlarını değiştirir. Bu nedenle, nitelik adını kaldırmak için boş bir dizeyle label() yöntemini kullandık.


$validator->rule("two_words", "name")->label("")

Geri bildirim

Doğrulama ile ilgili olarak, Valitron kitaplığı API'si, makalede daha önce gördüğümüzden pratik olarak farklı değildir. Doğrulama yapmak için doğrulayıcı yöntemini çağırıyoruz doğrulamak():


$validator->validate();

Doğrulama hata mesajları, yöntem kullanılarak elde edilebilir. getErrors():


$doğrulayıcı->hatalar();

Buradaki mesajlar, mesaj için ayrı bir sınıfın olmaması ve düzenli bir çok boyutlu dizi elde etmemiz dışında, Sirius Doğrulama'dakiyle tam olarak aynı şekilde özniteliklere göre gruplandırılmıştır.


foreach ($validator->errors() as $attribute => $messages) ( foreach ($messages as $message) ( echo $message . "\n"; ) )

kontrol

Son olarak, bugünün son kütüphanesi benim kendi geliştirmem olan Kontrolio.

kuralları tanımlama

Yine beşinci kez kullanıcı adı için bir doğrulama kuralı oluşturacağız. Her şey nispeten basit ve standarttır:


ad alanı Projem\Doğrulama\Kurallar; Kontrolio\Rules\AbstractRule'u kullanın; class TwoWords, Kontrolio\Rules\AbstractRule öğesini genişletir ( public function isValid($input = null) ( return (bool) preg_match("/^+\s+$/u", $input); ) )

Şimdi bir fabrika oluşturuyoruz ve yöntemi kullanarak kuralı kaydediyoruz. uzatmak():


ad alanı Projem; Kontrol\Fabrika'yı kullanın; Projem\Doğrulama\Kurallar\İki Kelime kullanın; $factory = Kontrolio\Factory::getInstance()->extend();

Kuralı kaydettikten sonra, onu adıyla da dahil olmak üzere kullanabiliriz - two_words . Bir doğrulayıcı oluşturalım:


$data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" => "" // Hiç şifre yok // Kullanıcı kutuyu işaretlemediği için "kabul edildi" dizide yok ]; $rules = [ "name" => "two_words", "login" => "bazen|alphadash", "email" => "email", "password" => "uzunluk:1,64", "kabul edildi" = > "kabul edildi"]; $messages = [ "name" => "Kullanıcı adınız iki kelimeden oluşmalıdır.", "login" => "Giriş bilgilerinizi beğenmedik.", "email" => "Bize vermek istemediğiniz açık. email adresiniz .", "password" => "Peki şifreniz nerede?", "agreed" => "Maalesef kabul etmiyorsunuz." ]; $doğrulayıcı = $fabrika->make($veri, $kurallar, $mesajlar);

Laravel'de kullanılana benzer bir sözdizimi kullanarak kuralları tanımladık, ancak daha ayrıntılı bir sürüm kullanabilirdik:


$rules = [ "isim" => yeni İki Kelime, "giriş" => , "email" => yeni E-posta, "şifre" => yeni Uzunluk(1, 64), "kabul edildi" => yeni Kabul Edildi ];

Geri bildirim

Doğrulama aynı yöntemle başlatılır doğrulamak():


$validator->validate();

Artık yöntemlerden birini kullanarak hata mesajları alabiliriz. getErrors() veya getErrorsList(). İlk yöntem daha karmaşık hata çıktısına izin verirken, ikincisi düz bir dizi döndürür. kullanma getErrors()şu şekilde mesajlar verebiliriz:


    $mesajlar): ?>

bir ile getErrorsList() daha basit bir mesaj listesi yapabilirsiniz:


getErrorsList(); ?>

Sonuç

Bu yazıda aşağıdaki kütüphanelerin kullanım örneklerini gösterdim:

  1. Aura.Filtre
  2. Doğrulamaya Saygı
  3. Sirius Doğrulaması
  4. Valitron
  5. kontrol

"Gerçek dünya örneği" çok basit görünebilir. Katılıyorum, çünkü gerçekten de kütüphanelerin bazı özellikleri makalenin dışında bırakıldı. Prensip olarak, ilgileniyorsanız, özelliklerini kendiniz inceleyebilirsiniz.


Kütüphanelerin her biri kendi çiplerini sunar, kendi karanlık tarafları vardır, bu yüzden doğru olanı seçmek bir zevk ve görev meselesi olduğunu düşünüyorum.


Okuduğunuz için teşekkürler. Doğru seçimi yap.

Etiketler:

  • veri doğrulama
  • php
  • bisikletçilik
Etiket ekle

Bir önceki makalede, kendi kitaplığımın mevcut diğer çözümlerle karşılaştırmasını yazacağıma söz vermiştim, bu yüzden bugün Aura.Filter , Respect Validation , Sirius Validation ve Valitron kullanarak doğrulamaya bakacağız.


Kullanıcıları tüm işlevlere tam erişim için kaydetmeyi içeren, geliştirilmekte olan bir tür kamu hizmetimiz olduğunu hayal edelim. Böylece, kayıt formu aşağıdaki alanları içerecektir:

  1. isim.İlki kullanıcının adı ve ikincisi soyadı olmak üzere tam olarak iki kelime içermelidir.
  2. giriş yapmak. Bir değer iletilirse, yalnızca latin harfleri, kısa çizgiler ve alt çizgiler içermelidir.
  3. e-posta Geçerli bir e-posta adresi içermelidir.
  4. şifre. Yüklenmeli ve 64 karakterden uzun olmamalıdır.
  5. kabul. Kullanıcının hizmet şartlarını kabul ettiğini onaylamak için işaretlemesi gereken tipik bir onay kutusu.

Bu nedenle, kullanıcının hayali hizmetimize kaydolması için doldurması gereken beş alanımız var. Girdi olarak tamamen geçersiz veriler aldığımızı düşünelim:


$data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" =>

Aura.Filtre

Aura.Filter kullanarak doğrulama, bir filtre fabrikasıyla başlar. Tek bir değeri değil, bir diziyi doğrulayacağımız için sözde bir "konu filtresi" oluşturmamız gerekiyor.

kuralları tanımlama

Aura\Filter\FilterFactory'yi kullanın; $filter = (yeni FilterFactory)->newSubjectFilter(); $filter->validate("ad") ->isNotBlank() ->is("two_words") ->setMessage("Ad iki kelimeden oluşmalıdır."); $filter->validate("login") ->isBlankOr("alnum") ->setMessage("Bir oturum belirtirseniz, sadece latin karakterleri içermelidir."); $filter->validate("email") ->isNotBlank() ->is("email") ->setMessage("Lütfen geçerli bir email adresi giriniz."); $filter->validate("şifre") ->isNotBlank() ->is("strlenMax", 64) ->setMessage("Lütfen bir şifre giriniz."); $filter->validate("kabul edildi") ->is("geri arama", function($subject, $field) ( return $subject->($field) === true; )->setMessage("İhtiyacınız var) hizmet şartlarını kabul ediyorum.");

Gördüğünüz gibi, kuralların açıklaması oldukça basit. Aura.Filter kullanıma hazır bir dizi yararlı kural sağlar ve bunlardan bazıları yukarıdaki örnekte kullanılmıştır:

  1. isNotBlank yöntemi. Alanın boş olamayacağını belirtir.
  2. mezun Bu kural sadece latin harflere izin verir.
  3. e-posta Ve çok net :)
  4. strlenMax. Alanın, is yönteminin ikinci bağımsız değişkeni tarafından belirtilen uzunluğu aşamayacağını belirtir.
  5. geri çağırmak. Bu tür bir kural, Kontrolio'daki kapatmalara benzer. Bir kuralı kapanış olarak tanımlamanıza izin verir. Aura.Filter bu kapatmaya, formdaki veri dizimiz olan "konu" ve bu durumda kararlaştırılan bir alan iletir.

Two_words kuralını belirtmediğimi fark etmişsinizdir. Doğal olarak Aura.Filter'da böyle bir kural yok, bu yüzden onu oluşturmamız gerekiyor. Belgelerin dediği gibi, bu, kural için ayrı bir sınıfla yapılır:


/** * Kullanıcı adını doğrulayan kural. * Kullanıcı adı iki kelimeden oluşur: ad ve soyadı, bir boşlukla ayrılmış. */ class UserNameRule ( /** * Kullanıcı adını doğrular. * * @param nesne|array $subject * @param string $field * @param int $max * * @return bool */ public function __invoke($subject, $field , $max = null) ( $value = $subject->($field); if (! is_scalar($value)) ( return false; ) return (bool) preg_match("/^+\s+$/u", $değer); ) )

İkinci adım, filtre fabrikasına yeni kuralımız hakkında bilgi vermektir. İlk bağımsız değişkeni bir kurallar dizisi olarak filtre fabrikasına ileterek yapılır:


Bir sonraki adım, Aura.Filter'a yeni bir kural oluşturduğumuzu ve onu kullanmak istediğimizi bildirmektir. Bu, ilk fabrika bağımsız değişkenine bir dizi kural iletilerek yapılır:


Aura\Filter\FilterFactory'yi kullanın; $rules = [ "two_words" => function() ( yeni KullanıcıAdıKuralını döndür; ) ]; $filter = (yeni FilterFactory($rules))->newSubjectFilter();

Artık iki_kelime kuralımız, standart dağıtımdaki diğer herhangi bir kural gibi kullanılabilir.

Geri bildirim

Hatırlayacağınız gibi, doğruladığımız girdi verileri tamamen geçersiz çünkü her alan yanlış bir değer içeriyor veya hiç içermiyor. Bu nedenle, doğrulama sonucunda hatalar ve bunlarla ilgili ilgili mesajlar alacağımız varsayılmaktadır.


Aura.Filter ile şu şekilde doğrulama yapıyoruz:


$geçerli = $filter->uygula($veri); if (! $valid) ( $failures = $filter->getFailures(); $messages = $failures->getMessages(); )

İÇİNDE $mesajları bir dizi yazılır, bu nedenle mesajları görüntülemek için iç içe iki foreach gerekir:


    $hatalar) ( foreach ($hata as $hata) ( printf("", $hata); ) ) ?>

Doğrulamaya Saygı

Karşılaştırma için kullandığım ikinci kitaplık, Respect Validation adlı nispeten popüler bir çözümdür. İnsanlar ona güvendiği için orada görülecek bir şey olduğunu düşünüyorum.


Deneyin saflığı için, kitaplıkları karşılaştırırken, başlangıçta tanımlanan veri setinin aynısını kullanacağız:


v olarak Saygı\Doğrulama\Doğrulayıcı kullanın; $data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" => "" // Hiç şifre yok // Kullanıcı kutuyu işaretlemediği için "kabul edildi" dizide yok ];

kuralları tanımlama

Aura.Filter'da olduğu gibi, kullanıcı adı için kendi doğrulama kuralımıza ihtiyacımız var, o yüzden bununla başlayalım:


ad alanı MyNamespace; Respect\Validation\Rules\AbstractRule'u kullanın; class UserNameRule, AbstractRule'u genişletir ( genel işlev valide($input) ( dönüş (bool) preg_match("/^+\s+$/u", $input); ) )

Harici kurallar API'si, Aura.Filter ile neredeyse aynıdır, yalnızca yöntem doğrulamak() sihir yerine __çağırmak(). Bana bu API daha basit ve anlaşılır göründü. Eh, Kontrolio'ya daha yakın :)


Dokümantasyonda bundan bahsetmedim, ancak kuralın kendisine ek olarak, onun için kendi istisna türünü oluşturmak gerekiyor. İstisna sınıf adı, kural sınıfı adından ve bir son ekten oluşmalıdır. İstisna.


Respect\Validation\Exceptions\NestedValidationException kullanın; class UserNameRuleException, NestedValidationException'ı genişletir ( // )

Son olarak, verilerimizi doğrulayabiliriz. İlk olarak, yeni kuralımızı doğrulayıcıya iletiyoruz ki o bunu bilsin, böylece gelecekte kullanabiliriz. Saygı Doğrulama'da bu, yöntemi çağırarak yapılır. ile() standart dışı kuralların bulunduğu ad alanının aktarımı ile.


v::with("İsimAlanım\\");

Artık ad alanında bulunan tüm standart dışı kurallar benim adımalanım, doğrulayıcı tarafından "tanımlanacaktır". Bir sonraki adım, gerekli kuralları tanımlamak ve doğrulama yapmaktır.


v::attribute("name", v::userNameRule()) ->attribute("login", v::alnum("-_")) ->attribute("email", v::email()) ->attribute("şifre", v::notEmpty()->stringType()->uzunluk(null, 64)) ->attribute("agreed", v::trueVal()) ->assert((nesne) $veri);

Kuralımızı özniteliğe nasıl uyguladığımıza dikkat edin isim. Burada kural sınıfının adı doğrulayıcı yöntemin adına dönüştürülmüştür. Genel olarak kuralların geri kalanı sezgiseldir.


Ayrı olarak, diziyi neden getirdiğimizi belirtmekte fayda var. $veri nesneye. Gerçek şu ki, Respect Validation girdi olarak dizileri değil nesneleri alır. Bu kütüphane kullanılarak geliştirme yapılırken bu dikkate alınmalıdır.

Geri bildirim

Aura.Filter'dan farklı olarak Respect doğrulayıcı, doğrulama başarısız olduğunda bir istisna atar. Ve bu istisna, doğrulama hata mesajları içerir. Bu nedenle, az önce gösterilen örnek aşağıdaki gibi yazılmalıdır:


deneyin ( v::with("RespectValidationExample\\"); v::attribute("ad", v::userNameRule()) ->attribute("login", v::alnum("-_")) - >attribute("email", v::email()) ->attribute("şifre", v::notEmpty()->stringType()->uzunluk(null, 64)) ->attribute("kabul edildi", v::trueVal()) ->assert((object) $data); ) catch (NestedValidationException $ex) ( $messages = $ex->getMessages(); )

kullanma getMessage(), doğrulayıcının doğrulama işlemi sırasında topladığı tüm mesajların düz bir dizisini alacağız. Bir diziyi dump ederek şöyle bir şey elde ederiz:


array(5) ( => string(29) "%s için veri doğrulaması başarısız oldu" => string(60) "oturum açma sadece harfler (a-z), rakamlar (0-9) ve "-_" => string içermelidir (25) "email must be valid email" => string(26) "password must not be empty" => string(32) "Kabul edilen özellik mevcut olmalı" )

Mesajları kendinize göre değiştirebilirsiniz. Belki bir şekilde bu kütüphaneyi yanlış anladım, ancak bu süreç bana çok açık gelmedi: yöntemi kullanmanız gerekiyor iletileri bul() iletileri nitelikler için değil, kurallar için tanımladığınız işlenmiş bir istisna üzerinde.


$ex->findMessages([ "userNameRule" => "Kullanıcı adı iki kelimeden oluşmalıdır.", "alnum" => "Kullanıcı adınızı beğenmedik.", "email" => "Belli ki istemiyorsunuz bize e-posta adresinizi verin.", "notEmpty" => "Şifreniz nerede?", "agreed" => "Üzgünüz, kabul etmiyorsunuz." ]);

Hatanın ne olduğunu bilmiyorum ama hala anlamadığım birkaç şey var. Kuralları yukarıdaki şekilde tanımlayarak elde ettiğimiz şey budur:


array(5) ( => string(40) "Kullanıcı adı iki kelime olmalıdır." => string(31) "Kullanıcı adınızı beğenmedik." => string(25) "e-posta geçerli bir e-posta olmalı" => string(5) "Şifreniz nerede?" => string(9) "Üzgünüz, kabul etmiyorsunuz." )

Gördüğünüz gibi, e-posta alanı mesajı uygulanmadı, standart olan kaldı. Ancak 4. indeksin arkasındaki mesaj tam tersidir! Ve bu, kuralın adını değil, alanın adını kullanmama rağmen. Oysa kuralın adını (trueVal) kullanırsam mesajım bir yerlerde kaybolurdu. Bu kitaplığın deneyimli kullanıcılarının yorumları memnuniyetle karşılanır.

Sirius Doğrulaması

Tamam, bir sonraki kitaplığa geçelim ve benzer görevleri nasıl yerine getirdiğini görelim.

kuralları tanımlama

Yine kullanıcı adı için bir kural tanımlamamız gerekiyor. Bunun gibi bir şey yazacağız:


class UserNameRule, AbstractRule'u genişletir ( // Hata mesajları const MESSAGE = "Kullanıcı adı iki kelime olmalıdır."; const LABELED_MESSAGE = "(etiket) iki kelime olmalıdır."; public function valide($value, $valueIdentifier = null ) ( dönüş ( bool) preg_match("/^+\s+$/u", $değer); ) )

Halihazırda ele alınan kitaplıklarla karşılaştırıldığında yaklaşımlardaki farklılıklara dikkat edin. Özellikler, yöntemler veya kural bağımsız değişkenleri kullanmak yerine sabitlerde iki tür mesaj tanımlarız.


Şimdi doğrulama mantığını açıklayalım:


$doğrulayıcı = yeni Doğrulayıcı; $validator ->add("name", "gerekli | Uygulamam\Validation\Rule\UserNameRule") ->add("login", "gerekli | alphanumhyphen", null, "Giriş yalnızca latin harfleri, kısa çizgiler ve alt çizgiler içerebilir. ") ->add("email", "gerekli | email", null, "Lütfen geçerli bir e-posta giriniz.") ->add("şifre", "gerekli | maxlength(64)", null, "Sizin şifre efendim.") ->add("katılıyorum", "gerekli | eşittir(doğru)", null, "Neden kabul etmediniz?");

Gördüğünüz gibi, kurallar dizisi oldukça basit ve okunabilir. Açıklamalar için yatay çizgilerle ayrılmış adlar kullanıyoruz. Bu yaklaşım, Laravel ve Kontrolio tarafından kullanılana benzer.


Dördüncü yöntem argümanı eklemek() doğrulama başarısız olursa Sirius'un kullandığı doğrulama hatası mesajını açıklar. Yeni kuralımız için neden bir mesaj eklemedik? KullanıcıAdıKural?


$validator->add("ad", "gerekli | Uygulamam\Doğrulama\Kural\KullanıcıAdıRule")

Bunun nedeni, mesajların zaten sınıf sabitlerinde tanımlanmış olmasıdır:


class UserNameRule, AbstractRule'u genişletir ( // Hata mesajları const MESSAGE = "Kullanıcı adı iki kelimeden oluşmalıdır."; ...

Başka bir seçenek de doğrulayıcının kendisinin addMessage() yöntemini kullanmaktır:


$validator->addMessage("email", "Lütfen geçerli bir e-mail giriniz.");

Kontrolio'da bir takma ad/takma ad ayarlayabilirken, özel kuralların sınıflarının tam adıyla tanımlandığını unutmayın.

Geri bildirim

Doğrulama yapmak için doğrulayıcı yöntemini çağırıyoruz doğrulamak(), verileri ona iletmek:


$data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" => "" // Hiç şifre yok // Kullanıcı kutuyu işaretlemediği için "kabul edildi" dizide yok ]; $doğrulayıcı->doğrula($veri);

Saygının aksine, Sirius bir istisna atmaz, sadece geri döner YANLIŞ. Doğrulama hata mesajları, doğrulayıcı yöntemi aracılığıyla alınabilir getMessage(). Özniteliğe göre gruplandırılmış hatalar döndürür, bu nedenle hataları yinelemek için iki foreach döngüsüne ihtiyacımız var:


foreach ($validator->getMessages() as $attribute => $messages) ( foreach ($messages as $message) ( echo $message->getTemplate() . "\n"; ) )

Burada $message bir sınıf nesnesidir Sirius\Doğrulama\HataMesajı bir yöntemi olan getTemplate(), bu da ihtiyacımız olan mesajı döndürür.

Valitron

kuralları tanımlama

İlk fark, yeni bir kural eklemek için ayrı bir sınıf oluşturmanıza gerek olmamasıdır. Basitçe bir boole sonucu döndüren bir kapatma kullanabilirsiniz.


Valitron'a özel kurallar eklemek için statik bir yöntem vardır. ekRule(), burada ilk iki bağımsız değişken gereklidir ve üçüncüsü isteğe bağlıdır. Bu yöntemi beğendim çünkü burada kural tanımlayıcı, mantık ve hata mesajı aynı anda tek bir yerde gösteriliyor.


Valitron\Validator'ı kullanın; Validator::addRule("two_words", function($field, $value) ( ​​​​return (bool) preg_match("/^+\s+$/u", $value); ), "Kullanıcı adı tam olarak iki kelime olmalıdır) .");

İkinci fark, kuralların niteliklere nasıl uygulandığıdır. Önceki tüm durumlarda, bir niteliğin adeta birincil bir şey olduğunu gördük.


Valitron diğer tarafa gitti ve doğrulama kurallarını ilk sıraya koydu. Kuralları tanımlayarak, bu kurallara nitelikler uygularsınız ve bunun tersi olmaz.


$doğrulayıcı = yeni Doğrulayıcı($veri); $validator ->rule("two_words", "name")->label("") ->rule("gerekli", [ "isim", "giriş", "e-posta", "şifre", "kabul edildi" ] ) ->rule("bilgi", "giriş") ->rule("email", "email") ->rule("kabul edildi", "kabul edildi");

Örnekte de görebileceğiniz gibi, yöntemde kural()önce kuralın adını yazıyoruz ve ancak o zaman bu kuralla eşleşmesi gereken nitelikleri belirtiyoruz. Daha açık bir örnek, özniteliklerin kurala nasıl "ait" olduğunu gösteren zorunlu kuraldır.


Valitron (incelediğimiz diğer çözümler gibi) standart hata mesajları sağlar. Sadece bunları kullanırsanız, her mesajın karşılık gelen özelliğin adıyla başladığını göreceksiniz.


Valitron, standart olmayan hata mesajları kullanıldığında bile mesaj metnindeki öznitelik adlarını değiştirir. Bu nedenle, nitelik adını kaldırmak için boş bir dizeyle label() yöntemini kullandık.


$validator->rule("two_words", "name")->label("")

Geri bildirim

Doğrulama ile ilgili olarak, Valitron kitaplığı API'si, makalede daha önce gördüğümüzden pratik olarak farklı değildir. Doğrulama yapmak için doğrulayıcı yöntemini çağırıyoruz doğrulamak():


$validator->validate();

Doğrulama hata mesajları, yöntem kullanılarak elde edilebilir. getErrors():


$doğrulayıcı->hatalar();

Buradaki mesajlar, mesaj için ayrı bir sınıfın olmaması ve düzenli bir çok boyutlu dizi elde etmemiz dışında, Sirius Doğrulama'dakiyle tam olarak aynı şekilde özniteliklere göre gruplandırılmıştır.


foreach ($validator->errors() as $attribute => $messages) ( foreach ($messages as $message) ( echo $message . "\n"; ) )

kontrol

Son olarak, bugünün son kütüphanesi benim kendi geliştirmem olan Kontrolio.

kuralları tanımlama

Yine beşinci kez kullanıcı adı için bir doğrulama kuralı oluşturacağız. Her şey nispeten basit ve standarttır:


ad alanı Projem\Doğrulama\Kurallar; Kontrolio\Rules\AbstractRule'u kullanın; class TwoWords, Kontrolio\Rules\AbstractRule öğesini genişletir ( public function isValid($input = null) ( return (bool) preg_match("/^+\s+$/u", $input); ) )

Şimdi bir fabrika oluşturuyoruz ve yöntemi kullanarak kuralı kaydediyoruz. uzatmak():


ad alanı Projem; Kontrol\Fabrika'yı kullanın; Projem\Doğrulama\Kurallar\İki Kelime kullanın; $factory = Kontrolio\Factory::getInstance()->extend();

Kuralı kaydettikten sonra, onu adıyla da dahil olmak üzere kullanabiliriz - two_words . Bir doğrulayıcı oluşturalım:


$data = [ "name" => "Albert", // İki kelime olmalı "login" => "@lbert", // "Yasak" karakter @ "email" => "bir sorun var", / / ​​Bu e-posta olmak "şifre" => "" // Hiç şifre yok // Kullanıcı kutuyu işaretlemediği için "kabul edildi" dizide yok ]; $rules = [ "name" => "two_words", "login" => "bazen|alphadash", "email" => "email", "password" => "uzunluk:1,64", "kabul edildi" = > "kabul edildi"]; $messages = [ "name" => "Kullanıcı adınız iki kelimeden oluşmalıdır.", "login" => "Giriş bilgilerinizi beğenmedik.", "email" => "Bize vermek istemediğiniz açık. email adresiniz .", "password" => "Peki şifreniz nerede?", "agreed" => "Maalesef kabul etmiyorsunuz." ]; $doğrulayıcı = $fabrika->make($veri, $kurallar, $mesajlar);

Laravel'de kullanılana benzer bir sözdizimi kullanarak kuralları tanımladık, ancak daha ayrıntılı bir sürüm kullanabilirdik:


$rules = [ "isim" => yeni İki Kelime, "giriş" => , "email" => yeni E-posta, "şifre" => yeni Uzunluk(1, 64), "kabul edildi" => yeni Kabul Edildi ];

Geri bildirim

Doğrulama aynı yöntemle başlatılır doğrulamak():


$validator->validate();

Artık yöntemlerden birini kullanarak hata mesajları alabiliriz. getErrors() veya getErrorsList(). İlk yöntem daha karmaşık hata çıktısına izin verirken, ikincisi düz bir dizi döndürür. kullanma getErrors()şu şekilde mesajlar verebiliriz:


    $mesajlar): ?>

bir ile getErrorsList() daha basit bir mesaj listesi yapabilirsiniz:


getErrorsList(); ?>

Sonuç

Bu yazıda aşağıdaki kütüphanelerin kullanım örneklerini gösterdim:

  1. Aura.Filtre
  2. Doğrulamaya Saygı
  3. Sirius Doğrulaması
  4. Valitron
  5. kontrol

"Gerçek dünya örneği" çok basit görünebilir. Katılıyorum, çünkü gerçekten de kütüphanelerin bazı özellikleri makalenin dışında bırakıldı. Prensip olarak, ilgileniyorsanız, özelliklerini kendiniz inceleyebilirsiniz.


Kütüphanelerin her biri kendi çiplerini sunar, kendi karanlık tarafları vardır, bu yüzden doğru olanı seçmek bir zevk ve görev meselesi olduğunu düşünüyorum.


Okuduğunuz için teşekkürler. Doğru seçimi yap.

Etiketler: Etiket ekle

Laravel basit bir şekilde gelir, uygun sistem doğrulama (kurallara uygunluk için giriş verilerinin kontrol edilmesi) ve doğrulama sınıfı tarafından hata mesajlarının alınması.

Doğrulamanın en basit örneği

$validator = Validator::make(array("ad" => "Dale"), dizi("ad" => "gerekli|dak:5"));

make yöntemine iletilen ilk parametre, kontrol edilecek verilerdir. İkinci parametre ise onlara uygulanması gereken kurallardır.

Kuralları Belirtmek İçin Dizileri Kullanma

Birden çok kural, bir iletme çubuğu (|) veya ayrı elemanlar sıralamak.

$validator = Validator::make(array("ad" => "Dale"), dizi("ad" => dizi("gerekli", "dak:5")));

Birden çok alanı doğrulama

$validator = Validator::make(array("name" => "Dale", "password" => "yanlış şifre", "email" => " [e-posta korumalı]"), array("isim" => "gerekli", "şifre" => "gerekli|dak:8", "email" => "gerekli|email|benzersiz"));

Bir Validator örneği oluşturulduktan sonra, doğrulama gerçekleştirmek için başarısız (veya başarılı) yöntemi kullanılabilir.

If ($validator->fails()) ( // Geçilen veri doğrulamada başarısız oldu )

Doğrulayıcı hata bulursa, mesajlarını şu şekilde alabilirsiniz:

$mesajlar = $doğrulayıcı->mesajlar();

Ayrıca, mesajların kendisi olmadan doğrulamada başarısız olan bir dizi kural da alabilirsiniz:

$başarısız = $doğrulayıcı->başarısız();

Dosyalar kontrol ediliyor

Validator sınıfı, size , mimes ve diğerleri gibi dosyaları doğrulamak için birkaç başlangıç ​​kuralı içerir. Dosyalar üzerinde doğrulama gerçekleştirmek için bu dosyaları diğer verilerle birlikte aktarmanız yeterlidir.

Doğrulamadan sonra kanca

Doğrulama tamamlandıktan sonra laravel, örneğin özel bir şeyi kontrol edebileceğiniz veya kendinize ait bir tür hata mesajı ekleyebileceğiniz kapatma işlevinizi çalıştırabilir. Bu, after() yöntemi kullanılarak yapılır:

$doğrulayıcı = Doğrulayıcı::make(...); $validator->after(function($validator) ( if ($this->somethingElseIsInvalid()) ( $validator->errors()->add("field", "Bu alanda bir sorun var!"); ) )); if ($validator->fails()) ( // )

Gerekirse birden fazla after ekleyebilirsiniz.

Denetleyicilerde doğrulama

Verileri doğrulamanız gereken her seferde eksiksiz doğrulama kodu yazmak zahmetlidir. Bu nedenle Laravel, bu prosedürü basitleştirmek için çeşitli çözümler sunar.

App\Http\Controllers\Controller temel denetleyicisi, halihazırda doğrulama yöntemlerini içeren ValidatesRequests özelliğini içerir:

/** * Blog gönderisini kaydedin. * * @param İstek $request * @return Response */ public function store(Request $request) ( $this->validate($request, [ "title" => "required|unique|max:255", "body" => "gerekli", ]); // )

Doğrulama geçerse, kod çalışmaya devam eder. Değilse, bir Illuminate\Contracts\Validation\ValidationException atılır. Bu istisnayı yakalamazsanız, çerçeve onu yakalar, flash değişkenlerini doğrulama hata mesajlarıyla doldurur ve kullanıcıyı formun - kendisi ile önceki sayfaya yönlendirir!

Bir AJAX isteği durumunda, yönlendirme yoktur, çerçeve, doğrulama hataları içeren HTTP kodu 422 ve JSON ile bir yanıt döndürür.

Yukarıdaki kod şuna benzer:

/** * Blog gönderisini kaydedin. * * @param İstek $request * @return Response */ public function store(Request $request) ( $v = Validator::make($request->all(), [ "title" => "gerekli|benzersiz|maksimum) :255", "body" => "gerekli", ]); if ($v->fails()) ( dönüş yönlendirme()->back()->withErrors($v->errors()); ) // )

Hata Biçimi Değişiklikleri

Yeniden yönlendirmelerde oturum flash değişkenlerinde depolanan doğrulama hata mesajlarını özelleştirmek istiyorsanız, denetleyicinizdeki formatValidationErrors yöntemini geçersiz kılın:

/** * (@inheritdoc) */ korumalı işlev formatValidationErrors(\Illuminate\Validation\Validator $validator) ( return $validator->errors()->all(); )

Doğrulama İste

Daha karmaşık doğrulama senaryoları için Form İstekleri sizin için uygun olabilir. Bunlar, doğrulama mantığını içeren özel HTTP istek sınıflarıdır. Denetleyiciye ulaşmadan önce isteği işlerler.

Bir istek sınıfı oluşturmak için make:request artisan komutunu kullanın:

php artisan make:request StoreBlogPostRequest

Sınıf, app/Http/Requests klasöründe oluşturulacaktır. Kurallar yöntemine gerekli doğrulama kurallarını ekleyin:

/** * İstek için geçerli olan doğrulama kurallarını alın. * * @dönüş dizisi */ genel işlev kuralları() ( dönüş [ "başlık" => "gerekli|benzersiz|maks:255", "gövde" => "gerekli", ]; )

Çerçevenin isteği denetleyiciden önce kesmesi için, bu sınıfı gerekli denetleyici yönteminin argümanlarına ekleyin:

İstek doğrulamanın doğru kullanımıyla, denetleyicilerinizde her zaman yalnızca doğrulanmış girişlerin bulunduğundan emin olabilirsiniz!

Doğrulama başarısız olursa çerçeve, flash değişkenlerini doğrulama hatalarıyla doldurur ve önceki sayfaya bir yönlendirme döndürür. Bir AJAX isteği durumunda, 422 kodu ve doğrulama hataları olan JSON ile bir yanıt döndürülür.

Giriş kontrolu

Form İsteği sınıfları ayrıca yetkilendirme yöntemini içerir. Bu yöntemde, kullanıcının bu eylemi gerçekleştirmesine izin verilip verilmediğini kontrol edebilir, verilen kaynağı güncelleyebilirsiniz. Örneğin, bir kullanıcı bir gönderideki yorumu düzenlemeye çalışırsa, gönderinin yazarı o mudur?

/** * Kullanıcının bu talebi yapmaya yetkili olup olmadığını belirleyin. * * @return bool */ public function yetkilendirme() ( $commentId = $this->route("comment"); return Comment::where("id", $commentId) ->where("user_id", Auth: :id())->var(); )

Yukarıdaki route() yöntem çağrısına dikkat edin. Bu yöntem, rotada tanımlanan url'deki (bu durumda (yorum)) parametrelere erişmenizi sağlar:

Route::post("yorum/(yorum)");

Authorize yöntemi false döndürürse, çerçeve bir 403 HTTP yanıtı oluşturur ve bunu hemen gönderir. Denetleyici yöntemi yürütülmez.

/** * Kullanıcının bu talebi yapmaya yetkili olup olmadığını belirleyin. * * @return bool */ genel işlev yetkilendirme() ( dönüş true; )

Flash Değişkenlerindeki Hata Biçimi Değişiklikleri

Yönlendirmelerde oturum flash değişkenlerinde saklanan doğrulama hata mesajlarını özelleştirmek istiyorsanız, istek temel sınıfındaki (App\Http\Requests\Request) formatValidationErrors yöntemini geçersiz kılın:

/** * (@inheritdoc) */ korumalı işlev formatValidationErrors(\Illuminate\Validation\Validator $validator) ( return $validator->errors()->all(); )

Hata Mesajlarıyla Çalışmak

Validator nesnesinin mesaj yöntemini çağırdıktan sonra, hata mesajlarına erişmek için bir dizi kullanışlı yöntem içeren bir MesajBag nesnesi elde edeceksiniz.

Bir alan için ilk mesajı alma

echo $mesajlar->ilk("email");

Bir alan için tüm mesajları alma

foreach ($messages->get("email") as $message) ( // )

Tüm alanlar için tüm mesajları alma

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

Bir alan için mesaj kontrolü

if ($messages->has("email")) ( // )

Belirli bir biçimde bir hata alma

echo $mesajlar->ilk("email", "");

Not: Varsayılan olarak, gönderiler Twitter Önyükleme için uygun bir şekilde biçimlendirilir.

Tüm mesajları belirli bir biçimde alın

foreach($messages->all("
  • :İleti
  • ") $mesaj olarak) ( // )

    Hatalar ve modeller

    Doğrulamayı tamamladıktan sonra, hataları şablona iletmenin kolay bir yoluna ihtiyacınız olacak. Laravel, bunu rahatlıkla yapmanızı sağlar. Örneğin, şu rotalarımız var:

    Route::get("register", function() ( return View::make("user.register"); )); Route::post("kayıt", function() ( $rules = array(...); $validator = Validator::make(Input::all(), $rules); if ($validator->fails() ) ( dönüş yönlendirmesi("kayıt")->withErrors($validator); ) ));

    Kontroller başarısız olduğunda, Validator nesnesini withErrors yöntemiyle Redirect nesnesine ilettiğimizi unutmayın. Bu yöntem, hata mesajlarını tek seferlik flash oturum değişkenlerinde saklar ve böylece bir sonraki istek için kullanılabilir hale getirir.

    Ancak, View::make("user.register"); öğesini geçmediğimize dikkat edin. Şablona $errors değişkenleri. Laravel, değişkenlerin varlığı için oturum verilerini kontrol eder ve varsa bunları otomatik olarak şablona iletir. Bu nedenle, $errors değişkeninin tüm şablonlarınız tarafından her zaman ve her istek üzerine kullanılabileceğini unutmamak önemlidir. . Bu, $errors değişkeninin her zaman tanımlı olduğunu ve güvenle kullanılabileceğini varsaymanızı sağlar. $errors değişkeni, MessageBag sınıfının bir örneğidir.

    Böylece, yönlendirmeden sonra, şablonda otomatik olarak ayarlanan $errors değişkenini kullanabilirsiniz:

    ilk("e-posta"); ?>

    Adlandırılmış Mesaj Çantası

    Sayfada birden çok formunuz varsa, hata metinlerinin döndürüleceği MessageBag nesnesinin adını seçebilirsiniz, böylece bunları istediğiniz form için doğru şekilde görüntüleyebilirsiniz.

    İade yönlendirmesi("kayıt")->withErrors($doğrulayıcı, "giriş");

    Login adlı MessageBag'den hata metni alın:

    login->ilk("email"); ?>

    Doğrulama kuralları

    Aşağıda mevcut tüm kuralların ve işlevlerinin bir listesi bulunmaktadır:

    kabul edilmiş

    Alan değer olarak olmalıdır Evet, Açık veya 1 . Bu, kuralların ve lisansların kabulünü kontrol etmek için kullanışlıdır.

    aktif_url

    Alan, checkdnsrr işlevi aracılığıyla erişilebilen geçerli bir URL olmalıdır.

    sonrasında: tarih

    Alan, şu tarihten sonraki bir tarih olmalıdır: tarih

    alfa

    Alan yalnızca alfabetik karakterler içermelidir.

    alpha_dash

    Alan yalnızca alfabetik karakterler, sayılar, alt çizgiler (_) ve kısa çizgiler (-) içermelidir.

    alfa_sayısı

    Alan yalnızca alfabetik karakterler ve sayılar içermelidir.

    sıralamak

    Alan bir dizi olmalıdır.

    önce: tarih

    Alan, şu tarihten daha eski bir tarih olmalıdır: tarih. Dizeler, strtotime işleviyle tarihlere dönüştürülür.

    arasında: dakika,maks.

    alan aralığında olmalıdır. dakikaönce maks.. Dizeler, sayılar ve dosyalar, boyut kuralına benzer şekilde ele alınır.

    mantıksal

    Alan mantıksal (boolean) olmalıdır. İzin verilen değerler true , false , 1 , 0 , "1" ve "0" şeklindedir.

    onaylanmış

    Alanın değeri, bu ada sahip alanın değeri artı foo_confirmation ile eşleşmelidir. Örneğin, şifre alanı kontrol ediliyorsa, eşleşen şifre_onay alanı giriş olarak iletilmelidir.

    tarih

    Alan, strtotime işlevine göre geçerli bir tarih olmalıdır.

    tarih formatı: biçim

    Alan, tarih biçimiyle eşleşmelidir biçim date_parse_from_format işlevine göre.

    farklı: alan

    Doğrulama altındaki alanın değeri, alanın değerinden farklı olmalıdır alan.

    e-posta

    Alan, geçerli bir e-posta adresi olmalıdır.

    var: masa,kolon

    Alan, belirtilen veritabanı tablosunda bulunmalıdır.

    Basit kullanım:

    "durum" => "mevcut:durumlar"

    Tabloda bir alan adı belirtmek:

    "durum" => "var:durumlar,kısaltma"

    "WHERE" sorgusuna eklenecek daha fazla koşul da belirleyebilirsiniz:

    "email" => "mevcut:personel,email,account_id,1"

    görüntü

    Yüklenen dosya bir resim olmalıdır. jpeg formatı, png, bmp, gif veya svg.

    içinde: foo,çubuk,...

    Alan değeri listelenen değerlerden biri olmalıdır ( foo, çubuk vesaire.).

    tamsayı

    Alan, geçerli bir tamsayı değerine sahip olmalıdır.

    ip

    Alan, geçerli bir IP adresi olmalıdır.

    maks: değer

    Alan değeri şuna eşit veya küçük olmalıdır: değer

    taklitler: foo,çubuk,...

    Yüklenen dosyanın MIME türü listelenenlerden biri olmalıdır.

    Basit kullanım:

    "fotoğraf" => "mimes:jpeg,bmp,png"

    dakika: değer

    Alan değeri şundan büyük olmalıdır: değer. Satırlar, sayılar ve dosyalar .

    değil: foo,çubuk,...

    Alan değeri Olumsuz listelenenlerden biri olmalı foo, çubuk vesaire.).

    sayısal

    Alan, geçerli bir sayısal veya kesirli değere sahip olmalıdır.

    normal ifade: model

    Alan, belirtilen normal ifadeyle eşleşmelidir.

    Dikkat: bu kuralı kullanırken, özellikle ifade boru karakterini (|) içeriyorsa, diğer kuralları dizi öğeleri olarak sıralamak gerekebilir.

    gerekli

    Doğrulanan alan mevcut olmalı ve boş olmayan bir değere sahip olmalıdır.

    gerekli_if: alan,değer,...

    Doğrulanan alan mevcut olmalı ve başka bir alan varsa boş olmayan bir değere sahip olmalıdır. alan mevcut ve değerlerden herhangi birine sahip değer.

    gerekli_ile: foo,çubuk,...

    Listelenen alanlardan en az biri mevcut ve boş olmayan bir değere sahip ( foo, çubuk vesaire.).

    hepsiyle birlikte gerekli: foo,çubuk,...

    Test edilen alan mevcut olmalı ve boş olmayan bir değere sahip olmalıdır, ancak yalnızca listelenen alanların tümü mevcutsa ve boş olmayan bir değere sahipse ( foo, çubuk vesaire.).

    gerekli_olmadan: foo,çubuk,...

    Doğrulanan alan mevcut olmalı ve boş olmayan bir değere sahip olmalıdır, ancak yalnızca Olumsuz listelenen alanlardan en az biri mevcut veya boş ( foo, çubuk vesaire.).

    hepsi olmadan gerekli: foo,çubuk,...

    Doğrulanan alan mevcut olmalı ve boş olmayan bir değere sahip olmalıdır, ancak yalnızca Olumsuz listelenen alanların tümü mevcut veya boş ( foo, çubuk vesaire.).

    Aynı: alan

    Alan, alanla aynı değere sahip olmalıdır alan.

    boyut: değer

    alan eşleşmelidir değer boyut. diziler için uzunluk anlamına gelir, sayılar için- sayı, dosyalar için- kilobayt cinsinden boyut.

    saat dilimi

    Alan, php-fonksiyonu timezone_identifiers_list içinde listelenenlerden biri olan bir saat dilimi tanımlayıcısı (zaman dilimi) içermelidir.

    eşsiz: masa,kolon,hariç,idSütunu

    Alan değeri, verilen veritabanı tablosunda benzersiz olmalıdır. Sütun belirtilmemişse alan adı kullanılacaktır.

    kolay kullanım

    "email" => "benzersiz:kullanıcılar"

    Tabloda alan adı belirtme

    "email" => "benzersiz:kullanıcılar,email_adresi"

    Belirli bir kimliği yok saymak

    "email" => "benzersiz:kullanıcılar,email_address,10"

    Ek koşullar ekleme

    "WHERE" sorgusuna eklenecek daha fazla koşul da belirleyebilirsiniz:

    "email" => "benzersiz:kullanıcılar,email_address,NULL,id,account_id,1"

    Yukarıdaki kuralda, yalnızca hesap_kimliği 1 olan satırlar kontrole dahil edilecektir.

    url

    Alan geçerli bir URL olmalıdır.

    Not: PHP işlevi filter_var kullanılır

    Koşullu Kurallar

    Bazen bir alanı doğrulamanız gerekir sadece girişte mevcut olduğunda. Bunu yapmak için bazen kuralını ekleyin:

    $v = Validator::make($data, array("email" => "bazen|gerekli|email",));

    Yukarıdaki örnekte, e-posta alanı doğrulamayı yalnızca $data["email"] mevcut olduğunda çalıştıracaktır.

    Karmaşık koşullu kurallar

    Bazen bir alanın yalnızca başka bir alanın değeri örneğin 100'den büyük olması durumunda bir değere sahip olmasını istersiniz. Veya yalnızca bir üçüncüsü de belirtildiğinde iki alana ihtiyaç duyabilirsiniz. Bu, koşullu kurallarla kolayca elde edilir. İlk olarak, asla değişmeyen bir dizi statik kural içeren bir Validator nesnesi oluşturun:

    $v = Validator::make($data, array("email" => "gerekli|email", "oyunlar" => "gerekli|sayısal",));

    Şimdi uygulamanızın oyun koleksiyoncuları için yazıldığını varsayalım. 100'den fazla oyuna sahip bir koleksiyoncu kaydolursa, onlara neden bu kadar çok oyuna ihtiyaçları olduğunu sormak isteriz. Örneğin, bir mağazaları olabilir veya sadece onları toplamaktan keyif alabilirler. Bu nedenle, böyle bir koşullu kural eklemek için Validator yöntemini kullanıyoruz.

    $v->bazen("sebep", "gerekli|maks:500", function($input) ( return $input->games >= 100; ));

    Bu yöntemin ilk parametresi, kontrol ettiğimiz alanın adıdır. İkinci parametre, geçen kapatma işlevi (üçüncü parametre) true döndürürse eklemek istediğimiz kuraldır. Bu yöntem, karmaşık girdi doğrulama kuralları oluşturmayı kolaylaştırır. Hatta aynı koşullu kuralları aynı anda birden çok alana ekleyebilirsiniz:

    $v->bazen(dizi("sebep", "maliyet"), "gerekli", function($input) ( return $input->games >= 100; ));

    Not: Kapanışa iletilen $input parametresi bir Illuminate\Support\Fluent nesnesidir ve doğrulanmış girdi ve dosyaları okumak için kullanılabilir.

    Kendi hata mesajları

    Varsayılan hata mesajları yerine özel hata mesajları sağlayabilirsiniz. Bunu yapmanın birkaç yolu var.

    İletilerinizi Doğrulayıcıya iletme

    $messages = array("gerekli" => "Alan:nitelik doldurulmalıdır.",); $doğrulayıcı = Doğrulayıcı::make($giriş, $kurallar, $mesajlar);

    Not: string:attribute, kontrol edilen alanın adıyla değiştirilecektir. Diğer değişken dizilerini de kullanabilirsiniz.

    Diğer Dize Değişkenlerini Kullanma

    $messages = array("same" => " :attribute ve :other değerleri eşleşmelidir.", "size" => ":attribute alanı tam olarak:size eşit olmalıdır.", "between" => ":attribute değeri from:min to:max olmalıdır.", "in" => "Field:attribute aşağıdaki değerlerden birine sahip olmalıdır: :values",);

    Tek Alan İçin Özel Mesaj Belirtme

    Bazen belirli bir alan için özel bir mesaj sağlamanız gerekebilir.

    $messages = array("email.required" => "E-posta adresinizi bilmemiz gerekiyor!",);

    Yerelleştirme dosyasında kendi mesajlarınızı belirtme

    Doğrulama mesajlarını doğrudan Validator'a iletmek yerine yerelleştirme dosyasında tanımlamak da mümkündür. Bunu yapmak için, app/lang/xx/validation.php yerelleştirme dosyasının özel dizisine mesajlar ekleyin.

    "custom" => array("email" => array("gerekli" => "E-posta adresinizi bilmemiz gerekiyor!",),),

    Kendi doğrulama kuralları

    Kendi Doğrulama Kuralınızı Kaydetme

    Laravel kutudan çıkar çıkmaz pek çok yararlı kuralla birlikte gelir, ancak kendi kurallarınızı oluşturmanız gerekebilir. İsteğe bağlı bir kuralı kaydetmenin bir yolu, Validator::extend yöntemidir.

    Validator::extend("foo", function($attribute, $value, $parameters) ( return $value == "foo)"; }); !}

    Not: kural adı format_with_underscores şeklinde olmalıdır.

    Aktarılan kapatma üç parametre alır: kontrol edilecek $attribute alanının adı, $value alanının değeri ve kurala iletilen $parameters parametre dizisi.

    Bir işlev yerine, bir sınıf yöntemine yapılan bir başvuruyu extension yöntemine iletebilirsiniz:

    Doğrulayıcı::extend("foo", " [e-posta korumalı]");

    Ayrıca yeni kural için bir hata mesajı tanımlamanız gerekeceğini unutmayın. Bunu bir dizi olarak Validator'a geçirerek veya bir yerelleştirme dosyasına yazarak yapabilirsiniz.

    Validator sınıfını genişletme

    Kullanılabilir kurallar kümesini genişletmek için kapatma işlevlerini kullanmak yerine Validator sınıfının kendisini genişletebilirsiniz. Bunu yapmak için, Illuminate\Validation\Validator mirasını alan bir sınıf oluşturun. Adlarını valide ile başlayarak yeni doğrulama yöntemleri ekleyebilirsiniz.

    Yeni Doğrulayıcı Sınıfı Kaydetme

    Daha sonra bu doğrulama uzantısını kaydetmeniz gerekir. Bunu, örneğin servis sağlayıcınızda veya başlangıç ​​dosyalarınızda yapabilirsiniz.

    Validator::resolver(function($translator, $data, $rules, $messages) ( yeni CustomValidator($translator, $data, $rules, $messages); ));

    Bazen kendi doğrulama sınıfınızı oluştururken, hata mesajlarında değiştirmek için kendi değişken dizilerinizi (":foo" gibi) tanımlamanız gerekebilir. Bu, yukarıda açıklandığı gibi bir sınıf oluşturarak ve replaceXXX gibi adlara sahip işlevler ekleyerek yapılır.

    Korumalı işlev replaceFoo($message, $attribute, $rule, $parameters) ( return str_replace(":foo", $parameters, $message); )

    İletinizi Validator::extend kullanmadan eklemek istiyorsanız, Validator::replacer yöntemini kullanabilirsiniz:

    Validator::replacer("kural", function($message, $attribute, $rule, $parameters) ( // ));