2

独自のカスタム ユーザー プロバイダーを作成しようとしていますが、Symfony チュートリアルのこの部分 ( Create a User Provider ) で行き詰っています。

$userdata 変数で何をする必要がありますか? データベース接続?

この場所で何をする必要があるのか​​ わかりません:

public function loadUserByUsername($username)
{
    // here
    // $userData = ...
    if ($userData) {
        //here too
        //$password = ...
        return new DomixBlogUser($username, $password, $salt, $roles)
    } else {
        throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
    }
}

編集#1

public function loadUserByUsername($username)
{
    $userData = $this->_em->getRepository("DomixBlogBundle:User")->findOneBy(array('username' => $username));
    var_dump($userData);
    if ($userData) {
        $salt = '54hg5g4hfjh4g5sdgf45gd4h84gjhdf54gf4g2f2gfdhggfdg';
        $password = $userData->getPassword().'{'.$salt.'}';

        return new DomixBlogUser($username, $password, $salt, $roles);
    } else {
        throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
    }
}

それは良い?

4

1 に答える 1

2

はい、ほとんどの場合、データベース接続からのものです。本当にどこからでも可能ですが。つまり、loadUserByUsernameメソッドは、指定されたユーザー名に基づいてユーザーを保存している場所/サービスから「ユーザーデータ」を取得し、それを返す必要があるということです。

public function loadUserByUsername($username)
{
    $userData = $this->_em->getRepository("DomixBlogBundle:User")->findOneBy(array('username' => $username));

    if (null !== $userData) {

        return $userData;
    } else {
        throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
    }
}

この例は、デフォルトのsymfonyエンティティユーザープロバイダーで確認できます。

于 2012-06-24T20:14:30.487 に答える