====== Шаг3. Пользователи, и все, что с ними связано ====== * Пользователи могут регистрироваться в нашем магазине. * Панель управления должна содержать средства для просмотра списка пользователей, и редактирования их. * Пользователи будут проходить процедуру аутентификации, после этого идентификатор зарегистрированного пользователя будет храниться в сессии. Данные пользователя будут при необходимости автоматически подгружаться из базы данных. * Профайл текущего пользователя будет отображаться в левой части страницы. Все это требует новых знаний по устройству Limb, поэтому мы решили разбить эту страницу на несколько дополнительных шагов, где постарались все подробно объяснить. ===== Класс User ===== Для начала нам необходима простейщая реализация модели пользователя - класс User, соответствующая требованиям: * свойства login, name и email являются обязательными * свойство email является правильным email-адресом Файл shop/src/model/User.class.php: class User extends lmbActiveRecord { protected $password; protected function _createValidator() { $validator = new lmbValidator(); $validator->addRequiredRule('login'); $validator->addRequiredRule('email'); $validator->addRequiredRule('name'); lmb_require('limb/validation/src/rule/lmbEmailRule.class.php'); $validator->addRule(new lmbEmailRule('email')); return $validator; } protected function _onBeforeSave() { $this->_generatePassword(); } protected function _generatePassword() { if($this->password) $this->setHashedPassword(self :: cryptPassword($this->password)); } static function cryptPassword($password) { return md5($password); } } Т.к. имя класса совпадает с именем таблицы в БД, то имени таблицы указывать не надо. Мы перекрыли в классе фабричный метод **_createValidator()**. Этот метод возвращает валидатор, который используется для проверки данных внутри объектов Product при сохранении. Подробнее о валидации данных в классах ACTIVE_RECORD в разделе [[limb3:ru:packages:active_record:validation|"Валидация данных в объектах"]]. Создаваемый в методе _createValidator() валидатор проверяет, что поля email, login и name должны быть заполнены, а поле email является валидным электронным адрессом. Обратите внимание на метод **_onBeforeSave()**. Это так называемый метод расширения класса lmbActiveRecord, который дочерние классы могут использовать чтобы выполнять необходимые действия, например, перед сохранением новой записи, перед обновлением существующей, после сохранения и т.д. Список методов расширения класса lmbActiveRecord есть в разделе [[limb3:ru:packages:active_record:enhancement|"Расширение поведения базового класса lmbActiveRecord"]]. В нашем случае мы использовали этот метод, чтобы шифровать поле **password** и формировать значение поля **hashed_password**. Таким образом мы будем хранить только хешированный пароль, а обновление хешированного пароля будет происходить только, если в поле password есть новое значение. ===== Далее ===== * [[limb3:ru:tutorials:shop:step3-1|Шаг3.1 Регистрация пользователей]] * [[limb3:ru:tutorials:shop:step3-3|Шаг3.2 Аутентификация пользователей]] * [[limb3:ru:tutorials:shop:step3-4|Шаг3.3 Редактирование и отображение профайла пользователя]] * [[limb3:ru:tutorials:shop:step3-2|Шаг3.4 Управление списком пользователей]]