Registry - зло, тем более в этом контексте.
Я не знаю как у вас построена архитектура, но предположу что она не сильно отличается от обще-принятых практик.
Как я вижу правильно спроектированное приложение:
employee(сотрудник) - объект, представляет конкретного сотрудника (в нашем случае, это будет объект ActiveRecords).
company (компания) - объект компании (ActiveRecords).
между employee и company отношение один ко многим, т.е. каждый конкретный сотрудник, относится к какой либо компании.
WebUser - представляет состояние текущего пользователя, это может быть как авторизованный пользователь, гость, поисковый бот и тп.
WebUser может менять свое состояние, например при авторизации пользователя, у объекта WebUser меняется роль, устанавливается id конкретного сотрудника и тд.
При условии что пользователь авторизовался и объект WebUser принял нужное состояние мы можем из него получить объект конкретного сотрудника (employee).
Код: Выделить всё
Yii::app()->user->getEmployee();
//или
Employee::model()->findByPk(Yii::app()->user->getId());
в случае если WebUser имеет состояние не авторизированого пользователя, то мы не можем получить из него объекты сотрудника и компании.
поскольку в компании может быть только конкретный сотрудник, то и получить компанию сотрудника мы можем только через модель Employee, а у WebUser нет ни какой компании.
т.е. компанию сотрудника мы можем получить так:
Код: Выделить всё
Yii::app()->user->getEmployee()->getCompany();
//или
Company::model()->findByEmployee(Yii::app()->user->getEmployee());
далее вы пишите: другие модели работают с компанией и объектом сотрудника текущего пользователя.
так вот работать в моделях c объектом WebUser неверно, так как этого объекта может вообще не существовать (консольное приложение).
правильнее сказать что эти модели взаимодействуют (имеют отношения) с моделями компании и сотрудника.
допустим есть объект (модель) Finance(финансы).
эта модель может работать с моделью сотрудника.
допустим нам из нее надо получить зп текущего сотрудника:
Код: Выделить всё
//$company->getFinance() - возвращает объект финансов конкретной компании
$company->getFinance()->calcSalaryForEmployee(Yii::app()->user->getEmployee());
работать в модели Finance напрямую с текущем пользователем, как я уже сказал, в корне не верно, а правильнее передеавать ей нужный объект.