Теперь у меня есть только одна переменная сообщения об ошибке, которая вытаскивает имя элемента из поля ввода формы, которое создает ошибку проверки. Поэтому, если у меня была только одна буква, введенная в поле ввода «firstname», сообщение об ошибке должно появиться следующим образом:Расширение переменной сообщения об ошибке
имя должно быть не менее 2 символов.
Что хорошо, но я хочу, чтобы создать новые переменные, так что я могу поставить что-то вроде
$firstname_validate_error
рядом с полем ввода Firstname и если это поле ввода бросает ошибку за ошибкой прийти рядом с этим полем.
Есть ли способ сделать это с кодом, который у меня есть, без огромной задачи? Я не уверен, как структурировать переменную, чтобы сделать это с моим классом проверки.
Я получаю мои ошибки проверки от этого:
} else {
foreach($validation->errors() as $error) {
$error;
}
Есть ли способ, что я могу структурировать это, так что я могу поставить какое-то переменные ошибки рядом с каждым полем ввода в форме, если поле ввода бросает ошибку проверки, появляется сообщение об ошибке?
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
if(Input::exists()) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'firstname' => array(
'required' => true,
'min' => 2,
'max' => 50
),
'lastname' => array(
'required' => true,
'min' => 2,
'max' => 50
),
'email' => array (
'required' => true,
'min' => 2,
'max' => 50
),
'phone_number' => array (
'required' => true,
'min' => 7,
'max' => 15
),
'username' => array(
'required' => true,
'min' => 4,
'max' => 20,
'unique' => 'users'
),
'password' => array(
'required' => true,
'min' => 6
),
'password_again' => array(
'required' => true,
'matches' => 'password'
)
));
if($validation->passed()) {
$user = new User();
$salt = Hash::salt(32);
try {
$user->create(array(
'firstname' => Input::get('firstname'),
'lastname' => Input::get('lastname'),
'email' => Input::get('email'),
'phone_number' => Input::get('phone_number'),
'username' => Input::get('username'),
'password' => Hash::make(Input::get('password'), $salt),
'salt' => $salt,
'joined' => date('Y-m-d H:i:s'),
'group' => 1
));
$success = "You have successfully created an account. We will notify you once the account has been approved. Then you will be able to login.";
echo $success;
} catch(Exception $e) {
die($e->getMessage());
}
} else {
foreach($validation->errors() as $error) {
$error;
}
}
}
}
}
Мой класс проверки, относящийся к этому вопросу.
public function check($source, $items = array()) {
foreach($items as $item => $rules) {
foreach($rules as $rule => $rule_value) {
$value = trim($source[$item]);
$item = escape($item);
if($rule === 'required' && empty($value)) {
$this->addError("{$item} is required");
} else if(!empty($value)) {
switch($rule) {
case 'min':
if(strlen($value) < $rule_value) {
$this->addError("{$item} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value) {
$this->addError("{$item} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $source[$rule_value]) {
$this->addError("{$rule_value} must match {$item}");
}
break;
case 'unique':
$check = $this->_db->get($rule_value, array($item, '=', $value));
if($check->count()) {
$this->addError("{$item} already exists.");
}
break;
Моя форма, как это ..
<form action="" method="POST">
<div class="field">
<label for="firstname">First Name</label>
<input type="text" class="inputbar" name="firstname" value="<?php echo escape(Input::get('firstname')); ?>" required>
</div>
<div class="field">
<label for="lastname">Last Name</label>
<input type="text" class="inputbar" name="lastname" value="<?php echo escape(Input::get('lastname')); ?>" required>
</div>