Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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)
- 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
// 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
// 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
// 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)
Hors ligne
Très intéressant, un grand merci !
Hors ligne