首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony 6固定装置UserPasswordHasherInterface

Symfony 6固定装置UserPasswordHasherInterface
EN

Stack Overflow用户
提问于 2022-02-02 07:32:40
回答 1查看 1.3K关注 0票数 -1

我们如何在一个夹具中使用UserPasswordHasherInterface来创建Symfony 6中的用户?

代码语言:javascript
运行
复制
//App/DataFixtures/AppFixtures.php

namespace App\DataFixtures;

use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;

class AppFixtures extends Fixture
{
    private $manager;

    public function load(ObjectManager $manager, UserPasswordHasherInterface $userPasswordHasherInterface): void
    {
        $this->manager = $manager;

        $user = new User();
        $user->setEmail("test@example.com");
        //$user->setPassword("test_pass");
        $user->setPassword(
            $userPasswordHasherInterface->hashPassword(
                $user, "test_pass"
            )
        );

        $user->setFirstName("Fixture First 1");
        $user->setLastName("Fixture Last 1");

        $this->manager->persist($user);
        $this->manager->flush();
    }
}

错误返回

代码语言:javascript
运行
复制
Fatal error: Declaration of App\DataFixtures\AppFixtures::load(Doctrine\Persistence\ObjectManager $manager, Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $userPasswordH
asherInterface): void must be compatible with Doctrine\Common\DataFixtures\FixtureInterface::load(Doctrine\Persistence\ObjectManager $manager) in C:\wamp64\www\example.com\src\DataFixtures
\AppFixtures.php on line 14
Symfony\Component\ErrorHandler\Error\FatalError {#138
  #message: "Compile Error: Declaration of App\DataFixtures\AppFixtures::load(Doctrine\Persistence\ObjectManager $manager, Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface
 $userPasswordHasherInterface): void must be compatible with Doctrine\Common\DataFixtures\FixtureInterface::load(Doctrine\Persistence\ObjectManager $manager)"
  #code: 0
  #file: "C:\wamp64\www\example.com\src\DataFixtures\AppFixtures.php"
  #line: 14
  -error: array:4 [
    "type" => 64
    "message" => "Declaration of App\DataFixtures\AppFixtures::load(Doctrine\Persistence\ObjectManager $manager, Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $userPass
wordHasherInterface): void must be compatible with Doctrine\Common\DataFixtures\FixtureInterface::load(Doctrine\Persistence\ObjectManager $manager)"
    "file" => "C:\wamp64\www\example.com\src\DataFixtures\AppFixtures.php"
    "line" => 14
  ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-02 07:58:35

您需要将UserPasswordHasherInterface注入到constructor中,如下所示:

代码语言:javascript
运行
复制
//App/DataFixtures/AppFixtures.php

namespace App\DataFixtures;

use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;

class AppFixtures extends Fixture
{
    private $userPasswordHasherInterface;

    public function __construct (UserPasswordHasherInterface $userPasswordHasherInterface) 
    {
        $this->userPasswordHasherInterface = $userPasswordHasherInterface;
    }

    public function load(ObjectManager $manager): void
    {
        $user = new User();
        $user->setEmail("test@example.com");
        //$user->setPassword("test_pass");
        $user->setPassword(
            $this->userPasswordHasherInterface->hashPassword(
                $user, "test_pass"
            )
        );

        $user->setFirstName("Fixture First 1");
        $user->setLastName("Fixture Last 1");

        $manager->persist($user);
        $manager->flush();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70951875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档