Код: Выделить всё
class Model extends Component
{
//...
public function load($data, $formName = null)
{
$this->trigger(self::EVENT_ON_LOAD, new OnLoadEvent([
'data' => $data,
]));
//...
}
//...
Наиболее распространенный случай - это атрибуты с датой-временем которые в БД хранятся в int-формате, в обычный html выводятся в различном виде через \yii\i18n\Formatter, а в поля формы должны попадать только в строго определенном формате (типа: 'Y-m-d H:i:s'), и в этом же формате проходить валидацию.
Простой пример поведения форматирующего время:
Код: Выделить всё
class EditableTimestampBehavior extends \yii\base\Behavior
{
public function events()
{
return [ActiveRecord::EVENT_ON_LOAD => 'onLoad'];
}
public function onLoad()
{
$this->owner->published_at = date('Y-m-d H:i:s', $this->owner->published_at);
$this->owner->on(ActiveRecord::EVENT_BEFORE_INSERT, [$this, 'beforeSave']);
$this->owner->on(ActiveRecord::EVENT_BEFORE_UPDATE, [$this, 'beforeSave']);
}
public function beforeSave()
{
$this->owner->published_at =
DateTime::createFromFormat('Y-m-d H:i:s', $this->owner->published_at)
->getTimestamp();
}
}