Lander: Я глянул лишь поверхностно, ничего проблемного не увидел. Заметил, что вы подражаете поведению ActiveRecord, что мне кажется лишним. Эти load() и validate() меня немного сбили, я сперва подучал что Robokassa у вас это сущность. Улучшать есть что, однозначно. Смотрите на Github примеры реализации других платежных систем, сравнивайте со своей.
Lander: Там без разницы. Вы наследуете определенный класс фреймворка лишь чтобы получить его возможности. Если вам не нужны Behavior и Event, то не за чем наследовать Component.
К примеру можно сделать Bootstrap-компонент, который будет выполняться при каждом запросе страниц. Для этого его нужно прописать в секции components конфигурации, указать его в секции bootstrap, применить интерфейс BootstrapInterface и реализовать публичный метод bootstrap().
> второй параметр - санитарная обработка
> И $default - очень даже ее отвественность
Мне кажется и дефолтное значение, и санитаризация, очень упростят задачу и позволят сделают функционал очень гибким. Просто обе эти возможности должны быть опциональными.
# Получаем нужный департамент
$department = Department::findOne( 7 );
# Получаем все его связанные Building
$buildings = $departament->buildings;
foreach ( $buidings as $building ) {
# Получаем все связанные комнаты каждого строения
$rooms = $building->rooms;
}
Только вот Department должен еще содержать метод getBuildindgs, а Building метод getRooms. Gii сам создаст все связи, как в одну, так и в другую сторону.
Александр Мускатин: Это кастомный проект, ничего полностью готового вы не найдете. Вам повезет, если вы сможете найти CMS с подобными расширениями или модулями и сможете их связать воедино. Писать вам на фреймворке не предлагаю. Вам нужна популярная распространенная CMS, которая имеет большое сообщество и множество готовых модулей.
> Или платить фрилансеру
Я думаю без этого вы не сможете запустится