Содержание

Шаг3. Пользователи, и все, что с ними связано

Все это требует новых знаний по устройству Limb, поэтому мы решили разбить эту страницу на несколько дополнительных шагов, где постарались все подробно объяснить.

Класс User

Для начала нам необходима простейщая реализация модели пользователя - класс User, соответствующая требованиям:

Файл 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 в разделе "Валидация данных в объектах". Создаваемый в методе _createValidator() валидатор проверяет, что поля email, login и name должны быть заполнены, а поле email является валидным электронным адрессом.

Обратите внимание на метод _onBeforeSave(). Это так называемый метод расширения класса lmbActiveRecord, который дочерние классы могут использовать чтобы выполнять необходимые действия, например, перед сохранением новой записи, перед обновлением существующей, после сохранения и т.д. Список методов расширения класса lmbActiveRecord есть в разделе "Расширение поведения базового класса lmbActiveRecord".

В нашем случае мы использовали этот метод, чтобы шифровать поле password и формировать значение поля hashed_password. Таким образом мы будем хранить только хешированный пароль, а обновление хешированного пароля будет происходить только, если в поле password есть новое значение.

Далее