Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP для продвинутых.docx
Скачиваний:
16
Добавлен:
01.07.2025
Размер:
12.54 Mб
Скачать

11. Валидация

Прежде чем создать HTML код формы, нам необходимо определить, какие данные мы будем получать от пользователей и каким правилам они должны соответствовать. Для фиксации этой информации можно использовать класс модели данных.

В зависимости от того, каким образом используются введённые данные, мы можем использовать два типа моделей. Если мы получаем данные, обрабатываем их, а затем удаляем, то используем модель формы; если же после получения и обработки данных мы сохраняем их в базе данных, то используем Active Record. Оба типа моделей данных используют один и тот же базовый класс CModel, который определяет общий интерфейс, используемый формами.

Далее в примере будет использована модель формы. Тем не менее, аналогичные действия применимы к моделям Active Record.

1. Определение класса модели

Ниже мы создадим класс модели LoginForm, который будет использоваться для получения данных, вводимых пользователем на странице аутентификации. Поскольку эти данные используются исключительно в целях аутентификации пользователя и сохранять их не требуется, то создадим модель LoginForm как модель формы.

Определение класса модели. Листинг 11.1

class LoginForm extends CFormModel

{

public $username;

public $password;

public $rememberMe=false;

}

2. Определение правил проверки

В момент, когда пользователь отправляет данные формы, а модель их получает, нам необходимо удостовериться, что эти данные корректны, прежде чем мы будем их использовать. Это осуществляется посредством проверки данных в соответствии с набором правил. Правила проверки задаются в методе rules(), который возвращает массив сконфигурированных правил.

Определение правил проверки. Листинг 11.2

class LoginForm extends CFormModel

{

public $username;

public $password;

public $rememberMe=false;

private $_identity;

public function rules()

{

return array(

array('username, password', 'required'),

array('rememberMe', 'boolean'),

array('password', 'authenticate'),

);

}

public function authenticate($attribute,$params)

{

$this->_identity=new UserIdentity($this->username,$this->password);

if(!$this->_identity->authenticate())

$this->addError('password','Неправильное имя пользователя или пароль.');

}

}

В коде, представленном выше, username и password — обязательные для заполнения поля, поле password должно быть проверено также на соответствие указанному имени пользователя. Поле rememberMe может принимать значения true или false.

Каждое правило, возвращаемое rules(), должно быть задано в следующем формате:

Формат для правил rules(). Листинг 11.3

array('AttributeList', 'Validator', 'on'=>'ScenarioList', …дополнительные параметры)

где AttributeList — строка, содержащая разделённые запятыми имена атрибутов, которые должны быть проверены в соответствии с правилами; Validator указывает на тип используемой проверки; параметр on — необязательный параметр, определяющий список сценариев, в которых должно использоваться правило; дополнительные параметры — это пары имя-значение, которые используются для инициализации значений свойств соответствующих валидаторов.

Начиная с версии 1.1.11 можно исключать отдельные правила. Если вы не хотите проводить валидацию для какого-либо правила и сценария, можно указать параметр except с указанием имени сценария. Синтаксис точно такой же, как и для параметра on.

Список сценариев (в параметрах on и except) может быть указан двумя эквивалентными способами:

Два способа вызова списка сценариев. Листинг 11.4

array(

'список полей модели',

'валидатор',

'on'=>array('update', 'create'), // в виде массива имён сценариев

'except'=>'ignore, this, scenarios, at-all', // строкой с именами, разделённой запятыми (пробелы не учитываются)

'message'=>'сообщение об ошибке',

…параметры валидации…

);

  • список полей модели: поля модели для валидации, разделённые запятыми;

  • валидатор: определяет, какой валидатор использовать;

  • on: определяет сценарий, для которого производится валидация. При указании нескольких сценариев, они разделяются запятыми. Если параметр не задан, правило применяется для всех сценариев;

  • except: определяет сценарий, при котором указанное правило валидации игнорируется. При указании нескольких сценариев, они разделяются запятыми.

  • message: сообщение, выдающееся при ошибке валидации;

  • …параметры валидации…: один или несколько дополнительных параметров, передающихся указанному валидатору.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]