Мой controller :: requestPassAction требует, чтобы вы указали значение для аргумента "$ tokengenerator" - PullRequest
0 голосов
/ 23 октября 2018

Я ввел в действие функциональность забытого пароля, и для этого я прошу пользователя заполнить его электронную почту, и мы отправим ему электронное письмо с токеном, чтобы он мог получить доступ к форме смены пароля.И для этого я использую TokenGeneratorInterface, но он показывает мне эту ошибку: controller :: requestPassAction требует, чтобы вы указали значение для аргумента "$ tokengenerator".Либо аргумент имеет значение NULL, и значение NULL не было предоставлено, значение по умолчанию не было предоставлено, либо после этого есть необязательный аргумент.

Контроллер

   public function requestPassAction(Request $request, TokenGeneratorInterface $tokenGenerator)
{



           $email = $request->request->get('username');

    $form = $this->createFormBuilder($email)
        ->add('username', EmailType::class)
        ->add('save', SubmitType::class, array('label' => 'Envoyer'))
        ->getForm();
    $form->handleRequest($request);


    if ($form->isSubmitted() && $form->isValid()) { 


        $em = $this->getDoctrine()->getManager();
        $user = $em->getRepository('DoctixUserBundle:User')->loadUserByUsername($form->getData()['username']);
        // ->findOneBy(array('username' => $email));

        if (!$user) {
            $request->getSession()->getFlashBag()->add('warning', "Cet email n'existe pas.");
            return $this->redirectToRoute("renouvellement_pass");
        } 


        $user->setToken($tokenGenerator->generateToken());
        // enregistrement de la date de création du token
        $user->setPasswordRequestedAt(new \Datetime());
        $em->flush();


         $mailer = $this->get('mailer');
    $message = (new \Swift_Message('Renouvellement du mot de passe'))
        ->setFrom("medmamtest@gmail.com")
        ->setTo($user->getUsername())
        ->setBody(
            $this->renderView(
                // app/Resources/views/Emails/registration.html.twig
                'Resetting/request.html.twig',
                array('user' => $user)
            ),
            'text/html'
        );

    $mailer->send($message);
    $request->getSession()->getFlashBag()->add('success', "Un mail va vous être envoyé afin que vous puissiez renouveller votre mot de passe. Le lien que vous recevrez sera valide 24h.");
     return $this->redirectToRoute("login");



    }


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

}

И когда я инициализирую аргумент нулем

 public function requestPassAction(Request $request, TokenGeneratorInterface $tokenGenerator = null )

У меня возникает ошибка: вызов функции-члена generateToken () для нуля в этой строке:

  $user->setToken($tokenGenerator->generateToken());

Информация для службы "security.csrf.token_generator"

   Option           Value
---------------- --------------------------------------------
  Service ID       security.csrf.token_generator
  Class        Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator
  Tags             -
 Public           no
 Synthetic        no
 Lazy             no
 Shared           yes
 Abstract         no
 Autowired        no
 Autoconfigured   no

Услуги

services:
    _defaults:
        autowire: true


   Doctix\UserBundle\ArgumentResolver\UserValueResolver:
       tags:
           - { name: controller.argument_value_resolver, priority: 50 }


   Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface: '@security.csrf.token_generator'

Спасибо

1 Ответ

0 голосов
/ 23 октября 2018

Думаю, подсказки не помогали.Просто добавьте псевдоним в файл services.yml

# services.yml
Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface: '@security.csrf.token_generator'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...