Yii - методы начинающиеся на get/set - "виртуальные атрибуты"
Primary tabs
базовая статья = http://www.yiiframework.com/wiki/167/und...
ВНИМАНИЕ: возможно возникновение подобной проблемы.
просто приведу пример модели - в качестве пары методов (один для получения - getAlias, а другой для установки значения - setAlias) которой реализован виртуальный атрибут Alias =
<?php
class Page extends CActiveRecord
{
/*в качестве правила про верки для
единственного поля нашей формы установим,
что длинна сообщения не должна превышать 200 символов*/
public function rules()
{
public static function model($className = __CLASS__)
{
return parent::model($className);
}
/**
* возвращаем имя таблицы БД для данной модели
*/
public function tableName()
{
return '{{page}}';
}
public function relations() // задаём отношения с другими классами (User)
{
return array(
// связи
'aliass' => array(self::HAS_ONE, 'Alias', 'urlalias_id'),
);
}
function attributeLabels()
{
return array(
'verifyCode' => 'Код проверки',
);
}
// виртуальный атрибут для получения значения alias
function getAlias() // метод будет извлекать некоторое поле связанной модели
{
// если известен id связывающий нашу модель с той, где хранится alias
if ($this->urlalias_id){ // если это не NULL
$alias = Alias::model()->findByAttributes( // пытаемся подгрузить модель из базы
array('id' => $this->urlalias_id)); // по-идее она там должна быть
if ($alias)
return $alias->alias; // возвращаем поле указанной модели
}
else return false;
}
// виртуальный атрибут для установки значения alias
// для работы с передаваемым адрибуту значением мы будем использовать $value
function setAlias($value) // метод будет извлекать некоторое поле связанной модели
{
$result = true; // просто значение по-умолчанию
if (isset($value)){ // если значение вообще опредлено
if ($value != ''){// если оно непустое
// если известен id связывающий нашу модель с той, где хранится alias
if ($this->urlalias_id){ // если это не NULL
$alias = Alias::model()->findByAttributes( // пытаемся подгрузить модель из базы
array('id' => $this->urlalias_id)); // по-идее она там должна быть
if ($alias)
$alias->alias = $value; // перезаписываем значение пседонима
}
else // если с данной страницей ещё не связан не один экземпляр другой модели
{ // то далее создадим новый экземпляр модели, привязываемой к Page и
// привяжем его
$alias = new Alias(); // то создаём новый объект
// и заполняем его рядом свойств, которые получены через $_GET
$alias -> urlInfoSet();
$alias->alias = $value; // опять же- устанавливаем значение
}
$result = $alias->save(); // возвращаем признак успешности сохранения модели
}
} else {// если значение пустое или вообще не опредлено
if ($this->urlalias_id){ // если что-то было уже привязано
$alias = Alias::model()->findByAttributes( // пытаемся подгрузить модель из базы
array('id' => $this->urlalias_id)); // по-идее она там должна быть
if ($alias) // если такая запись реально есть
$alias->delete();// удаляем её
}
}
return $result; // возвращаем результат
}
}
- Log in to post comments
- 8511 reads