Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-01-2010 14:03:05

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Zend_Application + Doctrine (PEAR_LOADGIN) + ZFDebug

En ce début d'année, j'ai envie d'apporter une mini contribution

Pour ceux qui sont passé à Doctrine 1.2, les models peuvent maintenant utilise maintenant la syntaxe 'PEAR'.
Je rajoute également ce qu'il faut pour utiliser le profiler de Doctrine avec ZFDebug
Voici comment j'organise tout ca chez moi :

La structure (réduit au sujet de ce topic)

Code:

- Application
-- configs
--- data
---- fixtures
---- sql
--- migrations
--- application.ini
--- schema.yml
- library
-- App
--- ZFDebug     // je respecte la hierarchie de ZFDebug
---- Controller
----- Plugin
------ Debug
------- Plugin
-------- Doctrine.php
-- Doctrine  // chez moi, lien symbolique vers /usr/local/share/Doctrine-1.2.1/lib/Doctrine
-- ZFDebug  // lien symbolique
- public
- scripts
-- doctrine
-- doctrine.php

Code:

// application/configs/Application.ini (réduit au sujet de ce topic)

[production]
autoloaderNamespaces[] = "Doctrine_"
autoloaderNamespaces[] = "ZFDebug_"

doctrine.dsn                = "mysql://root:root@localhost/mabase"
doctrine.data_fixtures_path = APPLICATION_PATH "/configs/data/fixtures"
doctrine.sql_path           = APPLICATION_PATH "/configs/data/sql"
doctrine.migrations_path    = APPLICATION_PATH "/configs/migrations"
doctrine.yaml_schema_path   = APPLICATION_PATH "/configs/schema.yml"
doctrine.models_path        = APPLICATION_PATH "/models"

[development]
zfdebug.enabled = 1

Code:

// application/Bootstrap.php (réduit au fonction lié sujet de ce topic)

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

  // Active le chargement de Model_, Form_, etc dans le répertoire de base du projet de ZF
  protected function _initAutoload()
  {
    $moduleLoader = new Zend_Application_Module_Autoloader(array(
      'namespace' => '',
      'basePath' => APPLICATION_PATH
    ));
    
    return $moduleLoader;
  }
 
  public function _initDoctrine()
  {
    // sans ca, impossible de charger Model_
    $this->bootstrap('autoload');
    
    // obligatoire pour sfYaml
    $this->getApplication()->getAutoloader()->pushAutoloader(array('Doctrine_Core', 'autoload'));
    
    $doctrineConfig = $this->getOption('doctrine');
    
    $manager = Doctrine_Manager::getInstance();

    $manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
    $manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_PEAR);
    $manager->setAttribute(Doctrine_Core::ATTR_AUTOLOAD_TABLE_CLASSES, true);
    $manager->setAttribute(Doctrine_Core::ATTR_MODEL_CLASS_PREFIX, 'Model_');
    

    // On peut l'améliorer et utiliser un tableau dans application.ini et ainsi fournir des noms
    // aux connexions. Moi, j'ai mis 'db' en dur ici
    $conn = Doctrine_Manager::connection($doctrineConfig['dsn'], 'db');
    
    
    // return $conn;
    return $manager;
  }
 
  public function _initZFDebug()
  {
    $zfdebugConfig = $this->getOption('zfdebug');
    
    if ($zfdebugConfig['zfenabled'] != 1) {
      return ;
    }

    $options = array(
      'plugins' => array('Variables', 
                        'App_ZFDebug_Controller_Plugin_Debug_Plugin_Doctrine',
                         'File' => array('base_path' => APPLICATION_PATH ),
                         'Memory', 
                         'Time', 
                         'Registry', 
                         'Exception')
    );
    
    $debug = new ZFDebug_Controller_Plugin_Debug($options);
    $this->bootstrap('frontController');
    $frontController = $this->getResource('frontController');
    $frontController->registerPlugin($debug);
  }
}

Le code du plugin Doctrine pour ZFDebug, vous pouvez le trouver ici (je ne l'ai pas modifier) :
http://github.com/danceric/zfdebugdoctr … ctrine.php

Code:

// scripts/doctrine
#!/usr/bin/env php
<?php
chdir(dirname(__FILE__));
include('doctrine.php');

// scripts/doctrine.php

<?php

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

$application->getBootstrap()->bootstrap('doctrine');

$config = $application->getOption('doctrine');

// peut être placé dans application.ini si on veut
$config['generate_models_options'] = array(
  'pearStyle' => true,
  'baseClassesDirectory' => null,
    'baseClassPrefix' => 'Base_',
  'classPrefix' => 'Model_',
  'classPrefixFiles' => false
);

$cli = new Doctrine_Cli($config);
$cli->run($_SERVER['argv']);

Et voila, la génération Doctrine fonction avec ZF, avec en prime le profiling des requêtes dans ZFDebug

Dernière modification par nORKy (08-01-2010 14:04:13)


----
Gruiiik !

Hors ligne

 

#2 08-01-2010 14:17:23

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: Zend_Application + Doctrine (PEAR_LOADGIN) + ZFDebug

Très intéressant, un grand merci !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages