0

silex でプロジェクトを開始しました...認証を行ったところ、すべて正常に動作しました。しかし今、ユーザーのデータの一部を取得したいのですが、カスタム UserProvider で使用する User クラス (この例の Silex doc - カスタム ユーザー プロバイダーの定義から) は最終的なものであるため、オーバーライドできません。データベースへのアクセスを制限するために、 loadUserByUsername() でクエリを使用してすべての情報を取得するつもりでした。

Symfony\Component\Security\Core\User をオーバーライドするのは正しい方法ですか、それとも別のユーザーマネージャーを作成する必要がありますか?

ありがとう

4

1 に答える 1

3

次のようなメソッドを追加して、カスタム UserProvider をオーバーライドするのが正しい方法です。

  • 検索 ($UserId)
  • findAll()
  • 保存($ユーザー)
  • 削除($UserId)

public function buildObject(array $rowFromDatabase) {
    $user = new MyUser();
    $user->setId($row["id"]);
    $user->setUsername($row["username"]);
    $user->setSalt($row["salt"]);
    $user->setRole($row["role"]);
    $user->setPassword($row["password"]);
    return $user;
}

MyUserはUserInterfaceを実装する POJO です

あなたのloadUserByUsernameは

public function loadUserByUsername($username) {
    $sql = "SELECT * FROM MyUserTable WHERE username = ?";
    $row = $this->getDB()->fetchAssoc($sql, array($username));

    if($row) {
        return $this->buildDomainObject($row);
    }else{
        throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username));
    }
}

データベースへの接続を制限するには、DAO パターンを使用できます。

于 2015-06-05T12:17:17.893 に答える