После написания проекта, вспомнил про принцип единственной ответственности, и что у себя в проекте, где ни попадя использовал сервис-локатор, а именно обращение к текущему пользователю \Yii:$app->user->identity.
В общем, сделал сервис:
Код: Выделить всё
class LoginService
{
public function isGuest(): bool
{
return \Yii::$app->user->isGuest;
}
public function user():? User
{
if ($this->isGuest()) return null;
$user = \Yii::$app->user->identity;
if ($user instanceof User) return $user;
throw new \DomainException('Ошибка класса User. Должен быть Frontend');
}
public function admin():? \booking\entities\admin\User
{
if ($this->isGuest()) return null;
$user = \Yii::$app->user->identity;
if ($user instanceof \booking\entities\admin\User) return $user;
throw new \DomainException('Ошибка класса User. Должен быть Admin');
}
public function office():? \booking\entities\office\User
{
if ($this->isGuest()) return null;
$user = \Yii::$app->user->identity;
if ($user instanceof \booking\entities\office\User) return $user;
throw new \DomainException('Ошибка класса User. Должен быть Office');
}
public function check():? \booking\entities\check\User
{
if ($this->isGuest()) return null;
$user = \Yii::$app->user->identity;
if ($user instanceof \booking\entities\check\User) return $user;
throw new \DomainException('Ошибка класса User. Должен быть Check');
}
}
Код: Выделить всё
class ToursController extends Controller
{
private $loginService;
public function __construct(
$id,
$module,
LoginService $loginService,
$config = [])
{
parent::__construct($id, $module, $config);
$this->loginService = $loginService;
}
Единственный плюс, это теперь в классах понятно где какой используется User (в проекте это 4 независимых типа)
Вот думаю, стоит ли заморачиваться с респонсом и реквестом или это слишком?