Как мне закодировать пароль с помощью интерфейса userpasswordencoder внутри репозитория?

#symfony4 #php-7.1

#symfony4 #php-7.1

Вопрос:

В моем репозитории я хотел бы сделать что-то вроде:

 public function generatePassword(Users $user, UserPasswordEncoderInterface $passwordEncoder)
{
    return $passwordEncoder->encodePassword($user,$user->getPlainPassword());
}
  

но функция внутри контроллера ожидает второго аргумента. Есть ли способ автоматически загрузить интерфейс UserPasswordEncoderInterface или инициализировать его?

Ответ №1:

Вы можете сделать это с помощью внедрения конструктора.

Вы должны загрузить свой UserPasswordEncoderInterface в свой класс репозитория и сохранить его глобально (в своем классе). Затем вы можете использовать его без необходимости объявлять его в параметре функции.

Что-то вроде этого:

 class Repository
{
    private $passwordEncoder;

    public function __construct(UserPasswordEncoderInterface $passwordEncoder)
    {
        $this->passwordEncoder = $passwordEncoder;
    }

    public function generatePassword(Users $user)
    {
        return $this->passwordEncoder->encodePassword($user,$user->getPlainPassword());
    }
}
  

Также введите подсказку вашему сервису.