Модель в Yii

Общий обзор работы модели фрэймворка 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(...);
Теги:
Модель
Добавлено: 20 Апреля 2018 18:42:09 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...