Как в symfony 3.4 получить или изменить пароль пользователя (FOSUserBundle)?

В Symfony 3.4 с использованием пакета FOSUserBundle, для получения или изменения пароля пользователя можно воспользоваться несколькими подходами.

1. Получение пароля пользователя:
Вы можете получить хэшированный пароль пользователя, используя сервис FOSUserBundleModelUserManagerInterface. Для этого вы можете внедрить этот сервис в ваш контроллер или сервис. Ниже приведен пример кода, как это можно сделать:

use FOSUserBundleModelUserManagerInterface;

class UserController extends Controller
{
    private $userManager;

    public function __construct(UserManagerInterface $userManager)
    {
        $this->userManager = $userManager;
    }

    public function getPasswordAction($userId)
    {
        $user = $this->userManager->findUserBy(['id' => $userId]);

        if (!$user) {
            throw $this->createNotFoundException('User not found');
        }

        $password = $user->getPassword();

        // Дальше можно использовать полученный пароль в своих целях
    }
}

2. Изменение пароля пользователя:
Для изменения пароля пользователя в Symfony 3.4 с использованием FOSUserBundle, вы можете воспользоваться формой редактирования пользователя, предоставленной пакетом. Ниже приведен пример кода:

use FOSUserBundleFormTypeChangePasswordFormType;
use SymfonyComponentSecurityCoreEncoderUserPasswordEncoderInterface;

class UserController extends Controller
{
    private $userManager;
    private $encoder;

    public function __construct(UserManagerInterface $userManager, UserPasswordEncoderInterface $encoder)
    {
        $this->userManager = $userManager;
        $this->encoder = $encoder;
    }

    public function changePasswordAction(Request $request, $userId)
    {
        $user = $this->userManager->findUserBy(['id' => $userId]);

        if (!$user) {
            throw $this->createNotFoundException('User not found');
        }

        $form = $this->createForm(ChangePasswordFormType::class, $user);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $plainPassword = $form->get('plainPassword')->getData();
            $encodedPassword = $this->encoder->encodePassword($user, $plainPassword);
            $user->setPassword($encodedPassword);

            $this->userManager->updateUser($user);

            return $this->redirectToRoute('user_profile');
        }

        return $this->render('user/change_password.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

В этом примере мы сначала находим пользователя по его идентификатору, затем создаем форму ChangePasswordFormType и обрабатываем данные, предоставленные этой формой. Если форма корректно заполнена, мы берем новый пароль из формы, хэшируем его при помощи UserPasswordEncoderInterface, а затем устанавливаем хэшированный пароль в свойство password объекта пользователя. И, наконец, мы обновляем пользователя, вызывая метод updateUser().

Учитывайте, что вы должны сообщить Symfony о смене пароля пользователя, добавив маршрут и шаблон.