Speak.Me Учить иностранные слова

Yii: модель (model)

Yii содержит два базовых класса для моделей:

  • yii\base\Model — для моделей, не связанных с таблицами БД, модель формы
  • yii\db\ActiveRecord — производный от первого, для моделей, связанных с таблицами БД

Класс Model

Атрибуты (Attributes)

Атрибуты это публичные поля модели. Для моделей, напрямую наследующих Model, все публичные поля как раз и становятся атрибутами. Если в модели переопределить метод attributes(), в нем можно задать иной порядок определения атрибутов. Например, в ActiveRecords атрибутами являются поля из связанной таблицы, при этом их не нужно  объявлять как публичные свойства модели.

К атрибутам можно получить доступ как к свойствам объекта, как к элементам массива, а так же перебрать в цикле.

Attribute Labels

Каждому атрибуту можно задать метку — более красивое название вместо его имени. Метод модели getAttributeLabel(“name”) вернет метку для атрибута name.

По умолчанию метки генерируются автоматически из имен атрибутов: имя разбивается на отдельные слова по заглавным буквам. Отвечает за это метод generateAttributeLabel(), который можно переопределить и задать иной механизм автогенерации.

Вместо автоматически сгенерированных можно задать свои метки для каждого атрибута. Для этого надо переопределить метод attributeLabels(), который должен вернуть ассоциативный массив атрибут=>метка.

Правила валидации (Validation Rules)

Правила валидации полей модели можно задать переопределив метод rules():

Вызвав в action’е метод модели validate() можно проверить выполнение этих правил для модели. Метод вернет true, если модель валидна, или false, если модель содержит ошибка. Так же в случае ошибок метод validate() установит свойство модели hasErrors в false. Сам ошибки можно получить в виде массива вызвав getErrors():

Класс ActiveRecord

Производный от Model.

С таблицей в БД линкуется автоматически: название класса должно совпадать с названием таблицы. Можно переопределить эту связь в методе tableName (static, должен возвращать строку с именем таблицы)