Что такое эффективный способ обработки данных, например, из представления формы?Эффективная проверка данных
Первоначально у меня была группа if
операторов, которые проверяли каждое значение и собирали недопустимые значения в массиве для последующего поиска (и перечисления).
// 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...
То, что я сделал дальше было создать класс, который обрабатывает сценарии проверки различных данных и сохранения результатов во внутреннем массиве. После проверки данных была завершена, я бы проверить, если произошла какая-либо ошибка и обрабатывать соответствующим образ:
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
}
Естественно, это не займет много времени, прежде чем этот класс стал раздутым с практически неограниченными типами данных для проверки. Что я делаю сейчас используют декоратор для разделения различных типов данных в свои классы и называть их только при необходимости оставляя общие валидации (т.е. isAlphaNumeric()) в базовый классе:
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
}
Am I на правильный трек? Или я просто усложнил проверку данных больше, чем мне нужно?
Я также использует тот же способ, вы описали в прошлом. Я также был бы заинтересован в получении ответа от этого Ques. Currenlty также проверяет форму. Я использую TryParse и другие встроенные функции, до которых это возможно. Оставшаяся я создаю себя. –