2

私は学校のプロジェクトに取り組んでおり、Doctrine を使用したいのですが、通常は大きすぎるため、フレームワークはありません。問題は、ドキュメントの構成チュートリアル ( http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/configuration.html )に従っても Doctrine を統合できないことです。誰かがそれをセットアップする必要があり、Doctrine の構成 (またはどのファイルに入れるか) に関するヒントやアイデアがあれば、私は何でも受け入れます。事前に感謝

4

1 に答える 1

2

お元気ですか?私は最近同じ問題を抱えていましたが、解決策は次のとおりです。

   use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;

require_once __DIR__ . '/vendor/autoload.php';
//require_once __DIR__ . "/src/model/persistence/entities";

$paths            = array(__DIR__ . "src/model/persistence/entities/");
$isDevMode        = false;
$connectionParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'root',
    'password' => 'pwd',
    'dbname'   => 'db_name',
);

$config = Setup::createConfiguration($isDevMode);
$driver = new AnnotationDriver(new AnnotationReader(), $paths);

// registering noop annotation autoloader - allow all annotations by default
AnnotationRegistry::registerLoader('class_exists');
$config->setMetadataDriverImpl($driver);

$entityManager = EntityManager::create($connectionParams, $config);

2) アクセス ポイントとして index.php を使用して MVC を使用しているため、この "bootstrap.php" を先頭に含め、$entityManager をグローバル配列 ($registry としましょう) にロードして、モデルに渡すことができるようにします。 (たとえば、コストラクタで)そしてdaoにアクセスできるようにします。

3) $use を使用して、dao で $entityManager を使用して、次のようなクエリを作成および実行します。

<?php

namespace persistence\daos;

require_once "vendor/autoload.php";
include_once __PERSISTENCE_PATH . '/daos/Dao.php';
include_once __PERSISTENCE_PATH . '/entities/UsuarioEntity.php';
include_once __PERSISTENCE_PATH . '/entities/RolUsuarioEntity.php';

use persistence\daos\Dao;
use persistence\daos\DaoImpl;
//use persistence\entities\RolUsuario;


interface UsuarioDao extends Dao {

    function findAllRoles();

    public function findById($id);

}

class UsuarioDaoImpl extends DaoImpl implements UsuarioDao {

    public function __construct($em) {
        parent::__construct($em);
    }

    public function findById($id) {
        return parent::findByPrimaryKey('model\persistence\entities\Usuario', $id);
    }

    public function save($usuario) {
        parent::save($usuario);
    }

    public function delete($usuario) {
        parent::delete($usuario);
    }

    public function findAll() {
        return parent::findAllByEntity('model\persistence\entities\Usuario');
    }

    public function login($email, $pwd) {
        $query = $this->entityManager->createQuery("SELECT u FROM model\persistence\entities\Usuario u WHERE u.email = '$email' AND u.senha = '$pwd' ");
        return $query->getResult();
    }

    public function findAllRoles() {
        $rolesRepository = $this->entityManager->getRepository('model\persistence\entities\RolUsuario');
        return $rolesRepository->findAll();
    }

}

このことは、既知のフレームワークがなくてもうまくいきました。

この投稿は、プロセスをスローするのに大いに役立ちました。これも見てください。

私の友人とうまくいくことを願っています!! 乾杯、私の英語の XD に申し訳ありません!

于 2014-02-12T00:54:32.590 に答える