Общий обзор работы модели фрэймворка Yii.
Для начала отметим, что Yii использует паттерн MVC.
Модель (model) в Yii — это экземпляр класса CModel или класса, унаследованного от него.
Yii предоставляет два типа моделей: модель формы (CFormModel) и Active Record (CActiveRecord ). Оба типа являются наследниками базового класса CModel.
Модель формы
CFormModel используется для хранения данных, введённых пользователем. Как правило, мы получаем эти данные, обрабатываем, а затем избавляемся от них. Например, на странице авторизации модель такого типа может быть использована для представления информации об имени пользователя и пароле.
Модели обычно располагаются в папке protected/models и называются аналогично таблице с которой работают. К примеру, модель которая работает с таблицей post должна быть названа "Post.php".
Вид типичной модели от
CActiveRecord.
class User extends CActiveRecord
{
/**
* @return имя таблицы
*/
public function tableName()
{
return '{{user}}';
}
/**
* Правила для валидации
* @return array validation rules for model attributes.
*/
public function rules()
{
return array(
array('email, username', 'unique'),
// и т.д.
);
}
/**
* Связи таблиц
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array();
}
/**
* Перевод названий атрибутов
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'id' => 'ID',
'username' => 'Аккаунт',
// и т.д.
);
}
/**
* Фильтр и поиск
*/
public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
// и т.д.
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
/**
* Обязательный метод для создания модели
*/
public static function model($className = __CLASS__)
{
return parent::model($className);
}
}
Вид типичной модели от
CFormMode.
class ContactForm extends CFormModel
{
public $email;
public $subject;
public $question;
public $verifyCode;
/**
* Declares the validation rules.
*/
public function rules()
{
return array(
// name, email, subject and body are required
array('subject, email, question, verifyCode', 'required'),
// email has to be a valid email address
array('email', 'email'),
// verifyCode needs to be entered correctly
// если авторизован не проверять капчу
array('verifyCode', 'captcha', 'allowEmpty' => Yii::app()->user->isGuest == false ? true : !CCaptcha::checkRequirements()),
);
}
/**
* Declares customized attribute labels.
* If not declared here, an attribute would have a label that is
* the same as its name with the first letter in upper case.
*/
public function attributeLabels()
{
return array(
'subject' => 'Тема',
'email' => 'Ваш e-mail для ответа',
'question' => 'Вопрос',
'verifyCode' => 'Капча',
);
}
}
Пример использования модели в контроллере.
$Posts = new Posts();
$Posts->findAll(...);
// или
Posts::model()->findAll(...);