Не всегда удобно использовать в представлении данные из контроллера в том виде, в котором они приходят изначально. Скажем страница с информацией о пользователе. Из контроллера я передаю AR-запись и в нужном месте вставляю
Код: Выделить всё
<?php echo $user->login; ?>
Но в некоторых моментах, этого недостаточно. К примеру дата регистрации выводится так:
Код: Выделить всё
<?php echo LDateTime::formatDate($user->date_reg, true, false, 2); ?>
Таким образом файлы представления часто становятся запутанными и неаккуратными.
Что бы справится с такой проблемой я использую специальные класс-контейнеры, которые содержат в себе необходимые данные и методы для их корректного вывода. К коде контроллера, я инициализирую этот класс, присваиваю его парамерам полученные из бд данные и отправляю его в представление. Вот пример такого контроллера (упроченный):
Код: Выделить всё
<?php
/**
* Пользователь (сущность).
*/
class SUser
{
/**
* Id.
* @var int
*/
public $id;
/**
* Логин.
* @var string
*/
public $login;44
/**
* Дата регистрации.
* @var string
*/
public $dateReg;
/**
* Возвращает id пользователя.
* @return void
*/
public function getId()
{
echo $this->id;
}
/**
* Отрисовывает аватар пользователя.
* @return void
*/
public function getAvatar()
{
// Здесь вызывается виджет...
}
/**
* Возвращает логин пользователя.
* @return void
*/
public function getLogin()
{
// Тоже специальный виджет...
}
/**
* Возвращает дату регистрации.
* @return void
*/
public function getDateReg()
{
echo LDateTime::formatDate($this->dateReg, true);
}
}
Код: Выделить всё
<?php $user->getAvatar(); ?>
Но присваивать все параметры вручную неудобно. Хотелось бы реализовать метод на подобии метода в AR. Что бы можно было сделать так: $user->setAttributes($MUser).
Моно было бы слизать метод из AR attributes, но данные не всегда приходят из AR, часто получаются в виде массива (из DAO), а не объекта (AR). Подскажите, как реализовать такое массовое присваивание?
Буду очень благодарен!