もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

AliceBundleでymlのfixtureでUserPasswordEncoderを使いたい

はじめに

こんばんは。

今回もSymfony5です。

かんたんな備忘録です。

hautelook/AliceBundle で ymlのfixtureを作ったさい、UserPasswordEncorderでパスワードを encodeしてみました。

github.com

本題

まず、ymlで実行する関数を定義するため、Providerを作ります。

<?php

declare(strict_types=1);

namespace App\DataFixtures\Providers;

use App\Entity\User;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class UserPasswordEncodeProvider
{
    private UserPasswordEncoderInterface $encoder;

    public function __construct(UserPasswordEncoderInterface $encoder)
    {
        $this->encoder = $encoder;
    }

    public function encodeUserPassword(string $plainPassword): string
    {
        return $this->encoder->encodePassword(new User(), $plainPassword);
    }
}

次に、services.ymlにて、先程作ったProviderを登録します。

services:


    App\DataFixtures\Providers\UserPasswordEncodeProvider:
        tags: [ { name: nelmio_alice.faker.provider } ]

これで準備完了です。 fixtureのymlで以下のように使えるようになります。

App\Entity\User:
  user1:
    email: 'xxxxxxx@gmail.com'
    password: <encodeUserPassword(secret)>
    name: kojirock

終わりに

新しいことやると、楽しいですね。

かんたんですが以上です。