Задать вопрос
@Maxemp

Почему функция поиска юзера не возвращает его?

Я переделываю замену пароля в advanced app.
Создал сервисы, репозитории и пошёл тестить, но выяснилось, что следующий код не возвращает юзера.
Ошибка:
PHP Notice – yii\base\ErrorException
Undefined variable: user

public function getByEmail(string $email):User
	{
		return $this->getBy(['email' => $email]);
	}


private function getBy(array $condition):User
	{
		if (!$user = User::find()->where($condition)->limit(1)->one()){
			throw new NotFoundException('User not found.');
		}
		return $user;
	}

Код сервиса по замене пароля
class PasswordResetService
{
	private $mailer;
	private $users;
	public function __construct(MailerInterface $mailer, UserRepository $users)
	{
		$this->mailer = $mailer;
		$this->users = $users;
	}

	public function request(PasswordResetRequestForm $form):void
	{
		/* @var $user User */
		$this->users->getByEmail($form->email);

		if (!$user){
			throw new \DomainException('User not found.');
		}

		$user->requestPasswordReset();
		$this->users->save($user);
		$sent = $this
			->mailer
			->compose(
				['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'],
				['user' => $user]
			)
			->setTo($user->email)
			->setSubject('Password reset for'. Yii::$app->name)
			->send();
		if (!$sent){
			throw new \RuntimeException('Sending Error');
		}
	}

	public function validateToken($token):void
	{
		if (empty($token || !is_string($token))){
			throw new \DomainException('Password reset token cannot be blank');
		}

		if (!$this->users->existsByPasswordResetToken($token)){
			throw new \DomainException('Wrong password reset token');
		}
	}

	public function reset(string $token, ResetPasswordForm $form):void
	{
		$user = $this->users->getByPasswordResetToken($token);
		$user->resetPassword($form->password);
		$this->users->save($user);
	}

}

Ещё подсвечивает вот эту строчку
if (!$user){
			throw new \DomainException('User not found.');
		}

Как решить эту проблему ?
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
qonand
@qonand
Software Engineer
С чего Вы взяли что функция не возвращает юзера?
$this->users->getByEmail($form->email);
Вы помоему этого самого юзера просто не сохраняете в переменную $user с которой работаете в дальнейшем
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы