Ich versuche, PasswordHasherInterface in der Fixtures-Klasse automatisch zu verknüpfen:
<?php namespace AppDataFixtures; use AppModelUserEntityUserEmail; use AppModelUserEntityUserId; use AppModelUserEntityUserRole; use AppModelUserEntityUserUser; use DoctrineBundleFixturesBundleFixture; use DoctrinePersistenceObjectManager; use SymfonyComponentPasswordHasherPasswordHasherInterface; class UserFixture extends Fixture { private PasswordHasherInterface $hasher; public function __construct(PasswordHasherInterface $hasher) { $this->hasher = $hasher; } public function load(ObjectManager $manager): void { $hash = $this->hasher->hash("password"); $user = User::signUpByEmail( Id::next(), new DateTimeImmutable(), new Email("admin@app.test"), $hash, "token" ); $user->confirmSignUp(); $user->changeRole(Role::admin()); $manager->persist($user); $manager->flush(); } }
Aber ich habe den Fehler erhalten:
In DefinitionErrorExceptionPass.php Zeile 54: ! !
!!Der Dienst „AppDataFixturesUserFixture“ kann nicht automatisch verbunden werden: Parameter „$hasher“
!!Methode „__construct()“ bezieht sich auf die Schnittstelle „SymfonyComponentPasswordH
!!asherPasswordHasherInterface“, aber es existiert kein solcher Dienst. Haben Sie einen erstellt
!!Eine Klasse, die diese Schnittstelle implementiert?
! !
Meine Dateiservices.yaml:
parameters: services: # default configuration for services in *this* file _defaults: autowire: true # Automatically injects dependencies in your services. autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. # makes classes in src/ available to be used as services # this creates a service per class whose id is the fully-qualified class name App: resource: '../src/' exclude: - '../src/DependencyInjection/' - '../src/Model/User/Entity/' - '../src/Kernel.php'
Wie hashe ich einfache Passwörter in Symfony 6.1? Warum erhalte ich diesen Fehler?
没有通用的
PasswordHasher
。您:
Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface
Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface
对于用户*。使用工厂,您的代码将如下所示:(未经测试)
重申一下,步骤是:
composer require symfony/password-hasher
UserPasswordHasherInterface
或PasswordHasherFactoryInterface
(请参阅示例)并获取PasswordHasher
*:修复程序的
UserPasswordHasherInterface
示例位于 此处。