На yii2 делаю подобную вещь и недавно спросили - почему просто в классе не пишу напрямую, а кидаю через аргумент. И вот ответить по-умному не могу, а что-то внутри говорит, что так неправильно будет (если напрямую).
Вот пример:
Код: Выделить всё
class PageController
{
public function actionSignIn(): Response
{
$service = new SignInService();
if ($service->canSignInUser(Yii::$app->getRequest()->post(), Yii::$app->getSecurity())) {
$service->signInUser(Yii::$app->getUser());
return $this->redirect(['user/profile']);
}
return $this->goBack();
}
}
class SignInService
{
public function canSignInUser(array $userData, Security $security): bool
{
// если такой юзер есть идем дальше, иначе - return false
// если пароль гавно - return false
if (!$security->validatePassword($userData['pass'], $user->getAttribute('pass')) {
return false;
}
$this->_user = $user;
return true;
}
public function signInUser(User $user): void
{
$user->login($this->_user);
}
private $_user = null;
}
P.S. мне предлагают не кидать в аргументы вещи типа Yii::$app->getUser(), а прямо в методах писать сразу \Yii::$app->getUser()->login($user);