Валідація – українська документація kohana 3

Щоб зрозуміти, як використати валідацію, спочатку вивчимо, як вона працює.

Для кожного поля можна встановити заголовок, наприклад, для поля username можна встановити заголовок «Ім'я користувача». Цей заголовок потім може використовуватися для створення повідомлення про помилку (наприклад, будь ласка, вкажіть ім'я користувача).

При запуску валідації, якщо якесь поле не проходить перевірку, функція повертає FALSE, а вам стає доступний масив зі списком помилок, який можна красиво показати користувачу.

Використання Для створення валідації потрібно використовувати метод Validation::factory($array), де $array — масив даних для перевірки:

$val > Після створення екземпляра об'єкта валідації, ви можете звертатися до нього як до масиву, щоб отримати дані:

$val > echo $validation['username']; Змінювати після створення ви їх не зможете.

Правила Для додавання правил використовуються методи rule($field, $rule, $params) — для додавання одного правила, і rules($field, $rules) — для додавання кількох правил одного поля. розглянемо список параметрів, що передаються:

$field — назва поля, до якого застосовуватиметься правило. $rule – правило для поля. Може встановити один із таких способів: Назва методу класу Valid, який надається Kohana і містить велику кількість вбудованих правил, наприклад, not_empty. Назва функції php, наприклад in_array(). Назва статичного методу будь-якого іншого класу, наприклад, Model_Category::check_id. Масив, що складається з екземпляра об'єкта та назви його методу, наприклад, array($this, 'check_id'). Лямбда-функція php. $param — масив параметрів, які передані правилу як аргументи функції. Можна передати якізавгодно значення, для автозаміни доступні такі: :value — значення поля, що перевіряється (передається за замовчуванням), :field — назва поточного поля, :data — масив усіх даних для поточної валідації, : validation – поточний об'єкт валідації. Приклад додавання правила, яке перевіряє, щоб поле username не було порожнім (not_empty - вбудований метод Kohana класу Valid):

$validation->rule('username', 'not_empty'); Приклад передачі параметрів функції php in_array():

$validation->rule('sex', 'in_array', array(':value', array('male', 'female'))); Передача масиву правил для поля:

$validation->rules('username', array( array('not_empty'), array('min_length', array(':value', 3)), ));

Зверніть увагу, якщо поле порожнє, то жодне правило не викличе для нього помилки, хоч і буде запущено. Таким чином, можна створювати «необов'язкові поля», які перевірятимуться, лише якщо вони заповнені. Щоб зробити поле обов'язковим, необхідно додати йому правило not_empty, яке згенерує помилку, якщо воно порожнє.

Приклад створення обов'язкових та необов'язкових полів:

$val > ->rule('email', 'not_empty') ->rule('email', 'email') ->rule('country', 'Model_Country::country_exists'); Поле email - обов'язкове і перевірка пройде тільки якщо це дійсно email, а ось поле country можна не вказувати, але якщо все ж таки вказати, то воно буде перевірено методом Model_Country::country_exists.

Параметри Клас валідації підтримує прив'язку параметрів, які потім можуть передаватися правилам. Прив'язка відбувається через метод bind($key, $value), де $key назва параметра, $value його значення:

$validation->bind(':roles', $roles); Також можнапередати відразу масив параметрів:

$validation->bind(array( ‘:roles’ => $roles, ‘:token’ => $this->get_token(), )); Після прив'язки параметрів, вони стають доступними при додаванні правил:

$validation->bind(':db', $this->db) ->rule('email', 'email_unique', array(':value', ':db')); Заголовки Якщо ви збираєтеся генерувати повідомлення про помилки, швидше за все вам знадобляться заголовки. Щоб встановити заголовок, використовуйте метод label($field, $label):

$validation->label('username', 'Ім'я користувача'); Щоб встановити відразу кілька заголовків для кількох полів, використовуйте метод labels($labels):

$validation->labels(array( ‘username’ => ‘Ім'я користувача’, ‘password’ => ‘Пароль’, )); Запуск

Якщо у вас включено профільування, клас валідації буде підраховувати час виконання кожного запуску.

Запуск перевірки відбувається через метод check(), який у разі успішної перевірки поверне TRUE, інакше FALSE:

$status = $validation->check(); Отримання помилок Якщо запуск валідації повернув FALSE, перевірка не пройшла. Після цього, ви можете отримати список помилок через метод errors($file, $translate), опціонально ви можете вказати наступні параметри:

$file (опціонально) — файл повідомлень, який використовуватиметься для створення зрозумілих людині повідомлень про помилку. $translate (опціонально) — чи перекладатиме повідомлення через I18N? Встановіть у TRUE, щоб перекладати поточну мову, або передайте назву мови, щоб примусово перекладати її. if( !$validation->check()) $errors = $validation->errors(‘validation’); > У цьому випадку файл повідомлення буде шукатися в /messages/validation.php.Покажемо приклад такого файлу:

return array ( 'not_empty' => ':field не повинно бути порожнім', ); У даному випадку, будь-яке поле, яке не проходить правило not_empty, міститиме помилку «:field не повинно бути порожнім», наприклад, «Ім'я користувача не повинно бути порожнім».

Також можлива і наступна структура, яка дозволяє кожному полю встановити свої повідомлення про помилки:

return array ( ‘username’ => array ( ‘not_empty’ => ‘Будь ласка, введіть своє ім'я’, ), ); Якщо для будь-якої помилки поля потрібно видавати однакове повідомлення, використовуйте структуру:

return array ( ‘username’ => array ( ‘default’ => ‘Ім'я користувача заповнене з помилками’, ) ); Складання своїх правил Правилом може бути будь-яка функція чи спосіб. Вважається, що правило пройшло перевірку, якщо повернено результат, відмінний від FALSE. Приклад складання правила:

// Додавання правила до валідації $validation->rule('field', 'Model_Tools::check_dog_name');

// Саме правило public static function some_rule($value) return $value == ‘Bob’; > Після запуску валідації, буде згенерована помилка, якщо поле field не буде рівним Bob.

Зверніть увагу, якщо значення поле порожнє, правило буде запущено, але навіть якщо воно поверне FALSE, то помилки не виникне. Щоб додати помилку для порожнього поля, необхідно використати метод error().

Додавання помилок Іноді потрібно, щоб одне правило могло повертати різні помилки. Щоб додати помилку з правила, потрібно для поточного об'єкта Validation викликати метод error($field, $error, $params), де $field – назва поля, $field – помилка та $params – масив параметрів, що використовується під час генерації повідомлення.Приклад додавання помилки:

// Зверніть увагу, що параметри правила також необхідно передавати // поточний об'єкт валідації та назва поля $validation->rule('field', 'Model_Tools::check_dog_name', array(':value') , ':validation', ':field'));

public static function some_rule($value, $validation, $field) if($name == 'Meaow') $validation-error($field, 'Dog name, not cat!'); >

// … > Вбудовані правила Kohana надає деякі вбудовані правила через методи класу Valid.

Використання Щоб використовувати вбудоване правило із класу Valid, досить просто написати назву методу класу:

$validation->rule('password', 'min_length', array(':value', 6); В результаті, спрацює метод Valid::min_length($password, 6).

Список правил Нижче наведено список вбудованих правил.

Збіги паролів Щоб не помилитися під час встановлення пароля, пропонують ввести його двічі. Приклад реалізації подібної функції через Kohana:

$val > ->rule('password', 'not_empty') ->rule('password_confirm', 'matches', array(':validation', ':field', 'password')