[CodeIgniter2][Doctrine2] Integracja Doctrine2 z projektem CodeIgnitera

Dziś czas na kolejny artykuł poświęcony dokładaniem bibliotek do naszego frameworka. Także jak poprzednio użyłem composera do instalacji Doctrine w projekcie.

Zacznijmy więc od początku...

 a na początku trzeba pobrać i wstępnie skonfigurować CI2. Potem zainstalować composera.

Posiadając już wykonane powyższe czynności należny utworzyć plik dla composera, o nazwie
composer.json , a w nim wpisać:

{
    "require": {       
  "doctrine/orm": "*"
    }
}

Tak przygotowany plik zapisujemy w głównej gałęzi projektu. I wywołujemy instalację naszego pliku.(Jeśli mamy integracje z menu kontekstowym, wystarczy kliknąć p.p.m na naszym pliku i wybrać opcje composer install).
Uwaga jeśli chcemy dodać więcej bibliotek to odzielamy je przecinkami np. tak:

{
    "require": {
       "facebook/php-sdk-v4" : "4.0.*",
 "doctrine/orm": "*"
    }
}

Jeśli natomiast mamy już jakieś biblioteki pobrane przez composera to wystarczy dokonać update.

I tak oto composer wygeneruje nam automatycznie klasę autoload, którą umieszczamy przed wywołaniem naszego CodeIgnitera. Więcej o tym pisałem tutaj.

Teraz zostało nam dodanie odpowiedniej klasy do folderu application/libraries/.
Tworzymy więc nowy plik Doctrine.php i wpisujemy w nim:

<?php

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\Common\ClassLoader;

class Doctrine {

    public $em;

    public function __construct() {
        
        $isDevMode = false;

        // the connection configuration
        $dbParams = array(
            'driver' => 'pdo_mysql',
            'user' => 'root',
            'password' => '',
            'dbname' => 'politycznik',
        );  
        
        $models_namespace = 'Entity';
        $models_path = APPPATH . 'models';
        $proxies_dir = APPPATH . 'models/Proxies';
        $metadata_paths = array(APPPATH . 'models');
        
        $config = Setup::createAnnotationMetadataConfiguration($metadata_paths, $isDevMode, $proxies_dir);
        $this->em = EntityManager::create($dbParams, $config);

        $loader = new ClassLoader($models_namespace, $models_path);
        $loader->register();
    }

}


Teraz możemy używać Doctrine w naszym kontrolerze czy modelu w taki sposób:

public function add_user() {

        $this->load->library('doctrine');
        $em = $this->doctrine->em;

        $user = new Entity\User;
        $user->setImie('Joseph');
        $user->setNazwisko('Wolfgang');
        $user->setEmail('josephatwildlyinaccuratedotcom');

        $em->persist($user);
        $em->flush();


        $data = array(
            'STATUS' => 'OK'
        );
        $this->load->view('valid', $data);
    }