{{label for="name"}}Имя:{{/label}} |
{{input id="name" name="name" type="text" title="name"/}} |
{{label for="login"}}Логин:{{/label}} |
{{input id="login" name="login" type="text" title="login"/}} |
{{label for="password"}}Пароль:{{/label}} |
{{input id="password" name="password" type="text" title="hashed_password"/}} |
{{label for="email"}}email:{{/label}} |
{{input id="email" name="email" type="text" title="email"/}} |
{{label for="address"}}Адрес:{{/label}} |
{{wysiwyg id="address" name="address" width="100%" height="300px" title="address"/}} |
Тут есть два момента:
* мы использовались автогенерацией вкладок
* вместо hashed_password у нас есть поле password, которое, как мы помним хэшируется перед сохранением объекта
===== Валидация пользователя =====
Реализация пользователей должна отвечать следующим требованиям:
* В системе не должно быть пользователей с одинаковыми логинами и email-адресами.
* Пароли пользователей не должны храниться в базе данных в открытом виде.
При помощи класса **%%UserUniqueFieldRule%%** мы будем проверять наличие одного уникального пользователя со значением какого-либо поля. Это правило валидации потом будет использоваться в классе **User**.
Файл %%shop/src/validation/UserUniqueFieldRule.class.php%%:
current_user = $current_user;
parent :: __construct($field);
}
function check($value)
{
$criteria = new lmbSQLFieldCriteria($this->field_name, $value);
if(!$this->current_user->isNew())
$criteria->addAnd(lmbSQLCriteria::notEqual('id', $this->current_user->getId()));
if(User :: findOne($criteria))
$this->error('Пользователь со значением поля {Field} уже существует');
}
}
Класс %%UserUniqueFieldRule%% получает в конструкторе название поля, которое должно быть уникальным, и ссылку на текущего пользователя. Текущий пользователь понадобится нам при редактировании.
Класс **%%lmbSingleFieldRule%%** является базовым для правил валидации одного поля. Файл класса можно найти по пути limb/validation/src/rule/lmbSingleFieldRule.class.php Дочерние классы должны перекрывать метод **check($value)**, где $value - значение поля, которое необходимо проверить. Следует отметить, что check($value) не вызывается, если $value не содержит значимого значения. Поэтому совместно с этим правилом (его дочерними) рекомендуется использовать также правило **lmbRequiredFieldRule**. Об этом ты также упомянем чуть ниже при описании кода класса User.
При помощи [[limb3:ru:packages:active_record:find|find-метода класса lmbActiveRecord]] делается запрос к базе данных. В качестве второго параметра вместо $params можно передавать объект критерии, которая будет накладываться на выборку. Критерия - это объектная форма условия. В нашем случае использовался класс **lmbSQLFieldCriteria**, который принимает в конструкторе название поля и значение (по-умолчанию для этой пары формируется условие равенства). Использование критериев позволяет не думать о экранировании данных в SQL-запросах. Класс **lmbSQLCriteria** является фабрикой для критерий. Вы можете подробнее ознакомиться с классами [[limb3:ru:packages:dbal:criteria|Criteria]], однако это необязательно для понимания данного примера.
Метод lmbSingleFieldRule :: **error($error_string, $values = array())** добавляет ошибку в список ошибок валидации. Выражения вида {Field} будут заменены в процессе работы на реальные имена полей формы, с которой производится создание/редактирование пользователя.
===== Далее =====
Мы рекомендуем вам, при помощи этой новой функциональности, добавить себе пользователя и приступить к следующему шагу: [[step4-2|"Шаг4.2 Аутентификация пользователей"]].