Bir form gönderme veri doğrulama, diyelim ki, işlemek için etkili bir yol nedir?
Aslında ben daha sonra geri alma (ve liste) bir dizinin her bir değeri ve toplanan geçersiz değerleri kontrol if tabloların bir grup vardı.
// Store errors here
$errors = array();
// Hypothetical check if a string is alphanumeric
if (!preg_match('/^[a-z\d]+$/i', $fieldvalue))
{
$errors[$fieldname] = 'Please only use letters and numbers for your street address';
}
// etc...
Ne sonraki yaptım, çeşitli veri doğrulama senaryoları işleyen bir sınıf oluşturmak ve bir iç dizide sonuçlar saklamak oldu. Veri doğrulama tamamlandıktan sonra herhangi bir hata oluşup oluşmadığını görmek için kontrol edin ve buna göre işlemek:
class Validation
{
private $errorList = array();
public function isAlphaNumeric($string, $field, $msg = '')
{
if (!preg_match('/^[a-z\d]+$/i', $string))
{
$this->errorList[$field] = $msg;
}
}
// more methods here
public function creditCard($cardNumber, $field, $msg = '')
{
// Validate credit card number
}
// more methods here
public function hasErrors()
{
return count($this->errorList);
}
}
/* Client code */
$validate = new Validation();
$validate->isAlphaNumeric($fieldvalue1, $fieldname1, 'Please only use letters and numbers for your street address');
$validate->creditCard($fieldvalue2, $fieldname2, 'Please enter a valid credit card number');
if ($validate->hasErrors())
{
// Handle as appropriate
}
Bu sınıf valide edilecek verilerin neredeyse sınırsız türleri ile şişirilmiş olmadan önce doğal olarak uzun sürmedi. Ben şimdi ne yapıyorum kendi sınıflarının içine veri farklı ayrı ve temel sınıfta jenerik doğrulamaları (yani isAlphaNumeric ()) bırakarak yalnızca gerektiğinde onları aramak için dekoratörler kullanıyor:
class Validation
{
private $errorList = array();
public function isAlphaNumeric($string, $field, $msg = '')
{
if (!preg_match('/^[a-z\d]+$/i', $string))
{
$this->errorList[$field] = $msg;
}
}
// more generic methods here
public function setError($field, $msg = '')
{
$this->errorList[$field] = $msg;
}
public function hasErrors()
{
return count($this->errorList);
}
}
class ValidationCreditCard
{
protected $validate;
public function __construct(Validation $validate)
{
$this->validate = $validate;
}
public function creditCard($cardNumber, $field, $msg = '')
{
// Do validation
// ...
// if there is an error
$this->validate->setError($field, $msg);
}
// more methods here
}
/* Client code */
$validate = new Validation();
$validate->isAlphaNumeric($fieldvalue, $fieldname, 'Please only use letters and numbers for your street address');
$validateCC = new ValidationCreditCard($validate);
$validateCC->creditCard($fieldvalue2, $fieldname2, 'Please enter a valid credit card number');
if ($validate->hasErrors())
{
// Handle as appropriate
}
Ben doğru yolda mıyım? Ya ben sadece gerekiyordu daha sonra veri doğrulama zorlaştırmak mı?