Piszemy prosty walidator. Później przejdziemy na coś bardziej zaawansowanego, na razie prosta klasa z metodami statycznymi. Do dzieła!
Tak wygląda to, co chcemy walidować:
<?php
$form_rules = [
'email' => ['required', 'email'],
'password' => ['required'],
'confirmPassword' => ['required', 'match:password']
];
$form_data = [
'email' => 'john.doe@gmail.com',
'password' => md5('helloworld'),
'confirmPassword' => md5('helloworld')
];
//rule1 - email:
$field1 = 'email';
$params1 = array();
//rule2 - match
$field2 = 'confirmPassword';
$params2 = array('password');
Prosta klasa:
class Validation
{
public static function string($value, $min = 1, $max = INF)
{
if (is_string($value)) {
$value = trim($value);
$length = strlen($value);
return $length >= $min && $length <= $max;
}
return false;
}
public static function email($value)
{
$value = trim($value);
return filter_var($value, FILTER_VALIDATE_EMAIL);
}
public static function match($value1, $value2)
{
return $value1 === $value2;
}
}
Użycie:
<?php
//(...)
$form_data = [
'email' => 'john.doe@gmail.com',
'password' => md5('helloworld'),
'confirmPassword' => md5('helloworld')
];
//rule1 - email:
$field1 = 'email';
$params1 = array();
//rule2 - match
$field2 = 'confirmPassword';
$params2 = array('password');
class Validation
{
//(...)
public static function email($value)
{
$value = trim($value);
return filter_var($value, FILTER_VALIDATE_EMAIL);
}
//(...)
}
var_dump(Validation::email($form_data[$field1]));
//string(18) "john.doe@gmail.com"
var_dump(Validation::email($form_data[$field2]));
//bool(false)
Warto nieco zmienić typ zwracany przez filter_var:
class Validation
{
//(...)
public static function email($value)
{
$value = trim($value);
return (bool)filter_var($value, FILTER_VALIDATE_EMAIL);
}
//(...)
}
var_dump(Validation::email($form_data[$field1]));
//bool(true)
var_dump(Validation::email($form_data[$field2]));
//bool(false)
Teraz match:
//(...)
$form_data = [
'email' => 'john.doe@gmail.com',
'password' => md5('helloworld'),
'confirmPassword' => md5('helloworld')
];
//rule1 - email:
$field1 = 'email';
$params1 = array();
//rule2 - match
$field2 = 'confirmPassword';
$params2 = array('password');
class Validation
{
//(...)
public static function match($value1, $value2)
{
return $value1 === $value2;
}
}
var_dump(Validation::match($form_data[$field2], $form_data[$params2[0]]));
//bool(true)
var_dump(Validation::match($form_data[$field1], $form_data[$params2[0]]));
//bool(false)
Jak widać używanie tej klasy nie jest takie proste, jak sama klasa i przydałby się jakiś adapter i fasada – albo po prostu napiszemy coś lepszego, co zrobimy w następnej lekcji.