Я пытаюсь создать свой собственный класс валидатора, чтобы я мог проверить длину предоставленного пользователем значения.Я знаю, что существует множество уже созданных опций, но я пытаюсь выучить PHP, и создание собственной работы - это подход, который я хочу использовать.
Я постараюсь объяснить, что я здесь делаю, и, надеюсь,Я никого не теряю.Я постараюсь, чтобы код говорил за меня как можно больше.Я начну с показа моего многомерного массива, который я буду использовать для получения опубликованной информации:
$input_array = array('username' => array( 'value'=> $_POST['username'],
'min' => 3,
'max' => 20
),
'password' => array( 'value'=> $_POST['password'],
'min' => 8,
'max' => 16
),
'email' => array( 'value'=> $_POST['email'],
'min' => 6,
'max' => 50
)
);
создайте объект:
$obj = new Validate(array_map('mysql_real_escape_string',$input_array));
$vl = $obj->ValidateLength();
Итак, здесь я покажу класс:
class Validate
{
private $inputArray;
public function __construct($inputAray)
{
$this->inputArray = $inputArray;
}
public function ValidateLength()
{
$larray = array('error'=>'','data'=> array());
foreach($this->inputArray as $k => $i)
{
if(strlen($i['value']) < $i['min'])
{
$larray['error'] = true;
$larray['data'][$k] = ' must be at least '.$i['min'].' characters long';
}
}
return json_encode($larray);
}
}
То, что делает класс, проверяет входное значение и определяет, соответствует ли оно значениям min
и max
, которые я поместил в массив.Если он находит ошибку, он изменяет значение ошибки на true и помещает все ошибки в массив для возврата в формате JSON.
Теперь у меня есть этот маленький парень:
$length = json_decode($obj->ValidateLength(),true);
, который будетпреобразовать JSON в другой многомерный массив, например, так:
var_dump ($ length)
array(2){
["error"]=>
bool(true)
["data"]=>
array(1){
["username"]=>
string(35)" must be at least 3 charracters long"
["password"]=>
string(35)" must be at least 8 characters long"
}
}
Итак, вот где возникает проблема.У меня есть это условие, которое замечает, что есть ошибка, и должно распечатать сообщение об ошибке для username
и password
:
$key = implode("\n",array_keys($length['data']));
$value = implode(", ",array_values($length['data']));
if($length['error'])
{
print("Error :\n\n".strtoupper($key).$value);
}
else
{
print('everything is within parameters');
}
Что я получаю, это:
Error:
USERNAME
PASSWORD must be at least 3 characters long, must be at least 8 characters long
Я хочу вот что:
Error:
USERNAME must be at least 3 characters long
PASSWORD must be at least 8 characters long
Несколько замечаний: я стараюсь избегать foreach()
, если это вообще возможно в условных выражениях, чтобы сделать очистку легкой.Кроме того, помня о модульности, я хочу иметь возможность изменить username
password
email
в первом начальном массиве, который получает пользовательский ввод для работы с другими проектами.
Если сам не объяснилслишком хорошо, и если вы потерялись в том, чего я пытаюсь достичь, пожалуйста, дайте мне знать, и я постараюсь лучше.Заранее благодарим за то, что у меня есть взгляд!