I am trying to encode a password with the encodePassword function from Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
inside my migration here is my code
I tried with implements UserPasswordEncoderInterface
but i did not manage to use this method encodePassword
The error is
Call to a member function encodePassword() on null
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Ramsey\Uuid\Uuid;
use App\Entity\User;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20201112164728 extends AbstractMigration
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;
public function getPassword($password)
{
$user = new User();
return $this->encoder->encodePassword($user,$password);
}
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
}
public function postUp(Schema $schema): void
{
$this->connection->insert('users', [
'id' => Uuid::uuid4(),
'email' => '[email protected]',
'password' => $this->getPassword('foo'),
]);
}
public function down(Schema $schema): void
{
}
}
My Answer:
To use the `encodePassword` method from `UserPasswordEncoderInterface` in your migration, you need to inject an instance of `UserPasswordEncoderInterface` into your migration class. Here's how you can modify your migration class to achieve this:
php
declare(strict_types=1);
namespace DoctrineMigrations;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Ramsey\Uuid\Uuid;
use App\Entity\User;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20201112164728 extends AbstractMigration
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;
public function __construct(UserPasswordEncoderInterface $encoder)
{
$this->encoder = $encoder;
}
public function getPassword($password)
{
$user = new User();
return $this->encoder->encodePassword($user, $password);
}
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
}
public function postUp(Schema $schema): void
{
$this->connection->insert('users', [
'id' => Uuid::uuid4(),
'email' => 'example@example.com',
'password' => $this->getPassword('foo'),
]);
}
public function down(Schema $schema): void
{
}
}
In this modified version of your migration class, we added a constructor that accepts an instance of `UserPasswordEncoderInterface` and assigns it to the private property `$encoder`. This way, you can use the `encodePassword` method in your migration methods. Make sure to pass an instance of `UserPasswordEncoderInterface` when creating an instance of this migration class.
Rate this post
5 of 5 based on 1120 votesComments