3

Zend フレームワークで Doctrine 2 を使用しています。私が望むのは、ユーザーがログインせずにユーザーパスワードを更新することです.これはエンティティクラスでそれを行う正しい方法ですか?

public function updatePassword($userId, $new_pass, $em){
    $em->getConnection()->getConfiguration()->setSQLLogger( new \Doctrine\DBAL\Logging\EchoSQLLogger()); 
    $qb = $em->createQueryBuilder();
    $q  = $qb->update('\Application\User\Entity\User', 'u')
            ->set('u.password', $qb->expr()->literal($new_pass))
            ->where('u.userId = ?1')
            ->setParameter(1, "$userId")
            ->getQuery();
    $p = $q->execute();
    return $p;     

    }
4

1 に答える 1

3

エンティティ クラスはエンティティ マネージャを使用しないでください。エンティティ クラスは単なるデータ ストレージです。

ユーザー エンティティ クラス:

namespace Entity;

class User {
    // ...

    public function setPassword($password)
    {
        $this->password = some_hash_algorythm($password);
        return $this;
    }

    // ...
}

コントローラーまたはユーザーのパスワードを更新する場所:

$repo = $em->getRepository('Entity\User');
$user = $repo->find($userId);
$user->setPassword($newPassword);
$em->persist($user);
$em->flush();

これにより、データ ストレージが実際の永続層から分離されます。

コードを配置するのが好きではなく、中央の場所に置きたい場合は、doctrine のカスタム リポジトリ クラスのドキュメントを参照してください (彼らはエンティティ マネージャーを認識しており、そこに「テーブル アクション」があります)。

于 2013-01-07T09:35:09.463 に答える