Проверка данных с использованием многомерного массива - PullRequest
0 голосов
/ 13 мая 2011

У меня есть метод класса проверки данных, где я проверяю пользовательский ввод перед вставкой записей в базу данных.я хотел бы применить много правил для каждого метода поля, например,

поле электронной почты должно будет подтвердить следующее

a) проверить электронную почту, используя FILTER_VALIDATE_EMAIL

b) checkесли в базе данных существуют повторяющиеся сообщения (это не применяется каждый раз)

имя поля должно подтверждать следующее.

a) разрешены только az или AZ с пробелом

b) это должно быть не менее 5 и не более 40 символов

и т. Д. Я хотел бы убедиться, что я должен иметь возможность применять много правил для каждого поля, и это должно бытьтакже необязательно.

Вот исходный код, который я использовал.

public function validate() {
    if(!empty($this->name)) {
        if(!preg_match('/^[a-zA-z ]{3,50}$/',$this->name)) {
            $this->error['name'] = 'Name should be valid letters and should be between 3 and 25 characters';
        }
    }
    if(!empty($this->email)) {
        if(!filter_var($this->email,FILTER_VALIDATE_EMAIL)) {
            $this->error['invalidEmail'] = 'Invalid email address';
        }
        if($this->emailCount($this->email)) {
            $this->error['emailExist'] = 'Email already exist';
        }
    }
    if(!empty($this->password)) {
        $this->password = trim($this->password);
        if(strlen($this->password) < 5 || strlen($this->password > 40)) {
            $this->error['password'] = 'Password length should be between 5 and 40 characters';
        }
    }
    if(!empty($this->pPhone)) {
        if(!preg_match('/^[0-9]{5,10}$/',$this->pPhone)) {
            $this->error['invalidpPhone'] = 'Invalid primary phone number';
        }
    }
    if(!empty($this->sPhone)) {
        if(!preg_match('/^[0-9]{5,10}$/',$this->sPhone)) {
            $this->error['invalidsPhone'] = 'Invalid secondary phone number';
        }
    }
    return (empty($this->error)) ? true : false;    
}

вместо того, чтобы использовать много условий if, я хочу использовать случай переключения с многомерным массивом с чем-то вроде этого.

var $validate = array(
    'name' => array(
        'notEmpty'=> array(
            'rule' => 'notEmpty',
            'message' => 'Name can not be blank.'
        ),
        'allowedCharacters'=> array(
            'rule' => '|^[a-zA-Z ]*$|',
            'message' => 'Name can only be letters.'
        ),
        'minLength'=> array(
            'rule' => array('minLength', 3),
            'message' => 'Name must be at least 3 characters long.'
        ),
        'maxLength'=> array(
            'rule' => array('maxLength', 255),
            'message' => 'Name can not be longer that 255 characters.'
        )
    ),
    'email' => array(
        'email' => array(
            'rule' => 'email',
            'message' => 'Please provide a valid email address.'
        ),
        'isUnique' => array(
            'rule' => 'isUnique',
            'message' => 'This E-mail used by another user.'
        )
    )        
); 

Я запутался в том, как реализовать mt-код для совместимости с более поздним.Что касается моего оригинала, я буду благодарен, если кто-то продемонстрирует мне пример реализации проверки с помощью более позднего.

спасибо.

1 Ответ

0 голосов
/ 13 мая 2011

Я бы добавил это в некоторые функции:

// Validation methods
function checkMail($mail) {
   // perform mail checks
   if(!valid)
      throw Exception("not valid mail");
}

function checkMinLength($string) {
   // perform length
   if(!valid)
      throw Exception("not valid length");
}

// mapping fields - methods
$mappingArray = array('mailfield' => array('checkMail'), 'lengthfield' => array('checkMinLength');

// perform checking
try {
   foreach($arrayContaintingYourFields as $field) {
      foreach($mappingArray[$field['name']] as $check) {
         call_user_func($check, $field['value']);
      }
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

Вы можете влиять на обработку ошибок, определяя собственные типы исключений и реагируя по-разному.

} catch (MailException $e) {
   echo $e->getMessage();
} catch (LengthException $e) {
   // do some other stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...