Witam. Jest to moj pierwszy walidator, dlatego prosze o konstruktywne opinie i sugestie, co poprawic
<?php
// Klasa z podstawowymi metodami walidacji
class valid {
public function required($value) {
}
public function alpha($value) {
}
}
// Klasa do walidacji konkretnego formularza, w tym przypadku formularza logowania
class user_valid extends valid {
public function username_valid($value) {
return false;
}
public function errors() {
'required' => 'Musisz podac nazwe uzytkownika',
'alpha' => 'Nazwa moze skladac sie jedynie ze znakow alfabetu',
'username_valid' => 'Test obiektow',
),
'not_sended' => 'Nie otrzymano hasla',
'required' => 'Musisz podac haslo',
),
);
}
}
// Klasa validacji
class validation {
private
$valid_object;
public function __construct($post, $object_name) {
$this->fields = $post;
$this->valid_object = new $object_name;
}
public function add_rules($field_name, $rules) {
if (isset($this->rules[$field_name])) { $this->rules[$field_name] = array_merge($this->rules[$field_name], $rules); } else {
$this->rules[$field_name] = $rules;
}
}
public function add_error($field_name, $error_name) {
if (isset($this->errors[$field_name])) { $this->errors[$field_name][] = $error_name;
} else {
$this->errors[$field_name] = array($error_name); }
}
public function validate() {
foreach ($this->rules as $field_name => $rules) {
foreach ($rules as $method) {
if (isset($this->fields[$field_name])) { if ($this->valid_object->$method($this->fields[$field_name]) === false) {
$this->add_error($field_name, $method);
}
} else {
$this->add_error($field_name, 'not_sended');
}
}
}
return empty($this->errors); }
public function errors() {
$errors_array = $this->valid_object->errors();
$output_errors = array(); foreach ($this->errors as $field_name => $errors) {
foreach ($errors as $error) {
if (isset($errors_array[$field_name])) { $output_errors[$field_name][] = $errors_array[$field_name][$error];
} else {
$output_errors[$field_name] = array($errors_array[$field_name][$error]); }
}
}
return $output_errors;
}
}
// Obsluga
'username' => '123',
);
$validation = new validation($post, 'user_valid');
$validation->add_rules('username', array('required', 'alpha', 'username_valid')); $validation->add_rules('password', array('required')); if ($validation->validate()) {
} else {
foreach ($validation->errors() as $field_name => $errors) {
foreach ($errors as $error) {
echo '<li>'.$error.'</li>'; }
}
}
Umiescilem wszystko w 1 pliku, aby bylo latwiej. Domyslnie klasy _valid beda w osobnym folderze