1

Doctrine Entity Manager をサービス レイヤーとテンプレート コントローラーから取得する最善の方法がわかりません。

シングルトンを作成して、常にエンティティマネージャーを取得できるように考えていますが、それは正しい方法ですか?

更新:例を挙げます

class Auth
{
    const USER_ENTITY_NAME = 'Entities\User';

    private $isVerified = FALSE;

    public static function login($email, $password, $em, $rememberMe = false)
    {
        if(empty($email) OR empty($password))
        {
            // new login response

        }

        if($user = (self::getUser($email, $password, $em) !== null))
        {
            $sreg = SessionRegistry::instance();
            $sreg->set("user_id", $user->getId());
        }
        return $user;
    }

    public static function getUser($email, $password, $em)
    {
        return $em->getRepository(
            USER_ENTITY_NAME );
    }

私が理解できないのは、どこからユーザーを取得する必要があるのですか? そのため、エンティティ マネージャーをパラメーターとして送信する必要はありません。

4

1 に答える 1

2

シングルトンよりも依存性注入を選択します。

Doctrine をどの環境で使用しているかはわかりませんが、MVC であると想定しています。その場合、コンストラクター引数として渡すか、セッターで注入することにより、コントローラーはエンティティーマネージャーにアクセスできる必要があります。

このようにして、コントローラーから何かを取得し、Auth最終的にクラスに渡すことができます。

とにかく、承認には外部クラスは必要ないと思います-loginActionコントローラーにメソッドを記述し、HTTPリクエストからユーザー名とパスワードを取得し、通常の考慮事項[ユーザーをフェッチ/パスワードが正しいかどうかを確認]を行い、保存しますログインに成功した場合のセッション中の何か。

于 2012-09-21T18:46:21.553 に答える