Installation de Doctrine 1.2.4 - Zend Framework 1.12 partie 2

Tutorial Application Facebook PHP/JS : Installation de Doctrine 1.2.4

Publié le 02/10/2013

1 - Mise en place de l’espace de travail

Nous allons créer d'une base "test" dans MySQL. Vérifier dans MAMP, dans l'onglet MySQL d'avoir décocher la case "Autoriser uniquement à un acces local".

Pour ce faire nous allons définir dans le fichier .bash_profile à la racine du dossier utilisateur de Mac OS X, un export path qui pointe vers les bin de MAMP. Cela nous permettra de faire les opérations de maintenance via le terminal et la CLI de MySQL :


cd /Users/gerard/
sudo nano .bash_profile

Ajouter la ligne suivante dans le fichier .bash_profile :

export PATH="/Applications/MAMP/Library/bin:$PATH" 

Nous avons fait cet ajout au chapitre précédent.

Sauvegardez avec ctrl-x.

Lancez la CLI MySQL dans le terminal :

mysql -u root -p 

Création de la base de données test :


create database test;
exit

2 - Installation de la library Doctrine

Nous allons télécharger Doctrine 1.2.4 à l’adresse suivante :

www.doctrine-project.org/downloads/Doctrine-1.2.4.tgz

Extraction de la library :


cp /Users/gerard/Downloads/Doctrine-1.2.4.tgz /Users/gerard/
cd /Users/gerard/ tar -xzvf Doctrine-1.2.4.tgz

 

copie du répertoire lib de doctrine dans l'include_path php :


mv Doctrine-1.2.4 Doctrine
sudo cp -r Doctrine /usr/lib/php/

Création d'un fichier de test doctrine-test.php dans /Applications/MAMP/bin/php/php5.3.6/lib/ php/ ou dans /usr/lib/php/ si vous êtes sur un Mac OS X :


cd /Applications/MAMP/bin/php/php5.3.6/lib/php/
nano doctrine-test.php

Ajout des lignes suivantes dans le fichier :


<?php
// include main doctrine class file
include_once 'Doctrine/Doctrine.php';
spl_autoload_register(array('Doctrine', 'autoload'));

// create Doctrine manager
$manager = Doctrine_Manager::getInstance();

//create database connection
$conn = Doctrine_Manager::connection('mysql://root:root@127.0.0.1/test','doctrine');

// get an print list of databases
$databases = $conn->import->listDatabases();
print_r($databases);

A la ligne suivante :

$conn = Doctrine_Manager::connection('mysql://root:root@127.0.0.1/test','doctrine'); 

Changer les paramètre de votre serveur MySQL :

$conn = Doctrine_Manager::connection('mysql://user:password@server_address/dbname','doctrine'); 

Exécuter le fichier doctrine-test.php dans le terminal :

php ./doctrine-test.php 

Il doit renvoyer un tableau contenant les noms des bases disponibles dans MySQL.

3 - Génération des classes modèles de l’application

Nous allons créer un fichier de génération de modèles doctrine-models-generate.php dans /Applications/MAMP/bin/php/php5.3.6/lib/php/ :


cd /Applications/MAMP/bin/php/php5.3.6/lib/php/
nano doctrine-models-generate.php

Ajout des lignes suivantes dans le fichier :


<?php
// include main doctrine class file
include_once 'Doctrine/Doctrine.php';
spl_autoload_register(array('Doctrine', 'autoload'));

// create Doctrine manager
$manager = Doctrine_Manager::getInstance();

//create database connection
$conn = Doctrine_Manager::connection('mysql://root:root@127.0.0.1/next_main_new','doctrine');

// auto-generate models
Doctrine::generateModelsFromDb('/tmp/models', array('doctrine'), array('classPrefix' => 'Next_Model_'));

Exécution du script pour la génération des modèles :

php ./doctrine-models-generate.php 

Les modèles se trouvent dans /tmp/models/

Nous allons créer un dossier du nom de notre application dans le dossier library :


cd /Applications/MAMP/htdocs/next/library/
mkdir Next

Copie des modèles dans le dossier "/library/Next/Model" de l'application next :


cd Next
mkdir Model
cd ..
cd ..
cp -r /tmp/models/ library/Next/Model
cp -r /tmp/models/generated/ library/Next/Model
cd library/Next/Model/
rm -R generated

Renommez les models en enlevant le préfixe "Next_Model_" :

cd /Applications/MAMP/htdocs/next/library/Next/Model/ 

Script shell :


for i in Next_Model_*;
do
NEWNAME=`echo "$i" | sed -e "s/^Next_Model_//"`;
mv -v -f $i $NEWNAME;
done

4 - Intégration de la library Doctrine dans le projet

Copie de la librairie Doctrine des class models de notre application dans le projet Zend :


cd /Applications/MAMP/htdocs/next/
cp -r /Applications/MAMP/bin/php/php5.3.6/lib/php/Doctrine/Doctrine library/

Ajout de la ligne suivante dans le fichier application.ini situé dans le dossier "$APP_DIR "/application/configs/, dans la section [production] :

doctrine.dsn = "mysql://root:root@localhost/next" 

Et ajouter à ligne de commentaire ; autoloader :

autoloaderNamespaces[] = "Doctrine_" 

Parametrage du fichier "$APP_DIR/application/bootstrap.php", par l'ajout de la méthode suivante et un require de la librairie Doctrine :

<?php require_once 'Doctrine.php'; 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initDoctrine()
    {

        $manager = Doctrine_Manager::getInstance();
        $manager->setAttribute(
            Doctrine::ATTR_MODEL_LOADING,
            Doctrine::MODEL_LOADING_CONSERVATIVE
        );

        $config = $this->getOption('doctrine');
        $conn = Doctrine_Manager::connection($config['dsn'], 'doctrine');

        // on définit la sortie encodée en UTF-8
        $conn->setCharset('utf8');
        $conn->setCollate('utf8_general_ci');

        return $conn;
    }
}