Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 我的控制器::requestPassAction要求您为$代币生成器“;论点_Symfony - Fatal编程技术网

Symfony 我的控制器::requestPassAction要求您为$代币生成器“;论点

Symfony 我的控制器::requestPassAction要求您为$代币生成器“;论点,symfony,Symfony,我设置了忘记密码的功能,为此,我要求用户填写他的电子邮件,并向他发送一封带有令牌的电子邮件,以便他可以访问密码更改表单。 为此,我使用了TokenGeneratorInterface,但它显示了以下错误:controller::requestPassAction要求您为“$tokengenerator”参数提供一个值。该参数可为null且未提供null值,未提供默认值,或者因为此参数后面有一个非可选参数 控制器 public function requestPassAction(Reque

我设置了忘记密码的功能,为此,我要求用户填写他的电子邮件,并向他发送一封带有令牌的电子邮件,以便他可以访问密码更改表单。 为此,我使用了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()
    ]);

}
   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
当我将参数初始化为null时

 public function requestPassAction(Request $request, TokenGeneratorInterface $tokenGenerator = null )
我有一个as错误:在这一行中调用null上的成员函数generateToken():

  $user->setToken($tokenGenerator->generateToken());
服务信息“security.csrf.token\u生成器”


服务

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'

谢谢

我猜这些提示没用。只需在services.yml文件中添加一个别名

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

检查控制器的自动接线配置是否正确,这是在services.yaml中定义的。您使用的是哪个Symfony版本?您好@mblaettermann我已经检查过了,我的自动布线是正确的,如文档中所定义。好的。现在从命令行运行“bin/console debug:container-tokengenerator-interface”以确认服务存在。我想没有。您需要有一个具有完全限定类名的服务,操作注入才能工作。可能需要创建一个alias.Hmmm。您确定查看的是服务ID而不是类属性吗?也许可以用debug:container的结果更新您的问题。我想你可以像对待邮递员一样,从容器中取出服务。但是,除非您在调用requestPassAction的方式上做了一些奇怪的事情,否则应该注入令牌接口实现。我在添加服务时更新了我的问题,因为我总是犯同样的错误。