2010-11-09 5 views
1

Je l'ai déjà fait sur un autre ordinateur et la configuration est presque identique. Cependant, il ne fonctionne tout simplement pas sur la nouvelle machine. Quand j'essaie d'obtenir Doctrine pour générer mes modèles, c'est de les mettre au mauvais endroit. Il crée un répertoire "Model" supplémentaire à la fois pour les classes de base et les classes régulières. J'utilise Doctrine 1.2.3 avec ZF 1.11.0. Voici ma ZF application.ini:Problèmes d'intégration de Zend Framework et de Doctrine

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
phpSettings.date.timezone = "America/Denver" 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "" 

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" 
resources.view[] = 

autoloaderNamespaces[] = "Doctrine_" 
autoloaderNamespaces[] = "App_" 

doctrine.connection_string = "mysql://[email protected]/mydb" 
;doctrine.cache = true 

doctrine.data_fixtures_path = APPLICATION_PATH "/doctrine/data/fixtures" 
doctrine.sql_path = APPLICATION_PATH "/doctrine/data/sql" 
doctrine.migrations_path = APPLICATION_PATH "/doctrine/migrations" 
doctrine.yaml_schema_path = APPLICATION_PATH "/doctrine/schema" 
doctrine.models_path = APPLICATION_PATH "/models" 

doctrine.generate_models_options.pearStyle = true 
doctrine.generate_models_options.generateTableClasses = true 
doctrine.generate_models_options.generateBaseClasses = true 
doctrine.generate_models_options.baseClassPrefix = "Base_" 
doctrine.generate_models_options.baseClassesDirectory = 
doctrine.generate_models_options.classPrefixFiles = false 
doctrine.generate_models_options.classPrefix = "Model_" 

[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

Voici ma fonction Doctrine de mon dossier ZF Bootstrap.php:

protected function _initDoctrine() 
{ 
    $this->getApplication()-> 
     getAutoloader()-> 
     pushAutoloader(array('Doctrine_Core', 'autoload')); 

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

    $manager = Doctrine_Manager::getInstance(); 
    $manager->setAttribute(Doctrine_Core::ATTR_MODEL_CLASS_PREFIX, 'Model_'); 
    $manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_PEAR); 
    $manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL); 
    $manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true); 
    $manager->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true); 
    $manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); 
    $manager->setAttribute(Doctrine_Core::ATTR_AUTOLOAD_TABLE_CLASSES, true); 

    if (isset($config['cache']) && $config['cache'] == true) { 
     $cacheDriver = new Doctrine_Cache_Apc(); 
     $manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, $cacheDriver); 
    } 

    $connection = $manager->openConnection($config['connection_string'], 'doctrine'); 
    $connection->setAttribute(Doctrine_Core::ATTR_USE_NATIVE_ENUM, true); 
    $connection->setCharset('utf8'); 

    return $connection; 
} 

Et voici mon doctrine.php script de ligne de commande:

// 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')); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path() 
))); 

/** 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'); 
$cli = new Doctrine_Cli($config); 
$cli->run($_SERVER['argv']); 

Alors, je me attends mon répertoire de modèles pour finir comme ça:

models 
    Base 
    -Class1.php 
    -Class2.php 
    -Class1.php 
    -Class1Table.php 
    -Class2.php 
    -Class2Table.php 

où les noms de classe de classe de base sont formatés comme Model_Base_Class1 et les noms de classe ordinaires sont Model_Class1 (dans les fichiers php eux-mêmes). Au lieu de cela, ce que je reçois est:

models 
    Base 
    Model 
     -Class1.php 
     -Class2.php Model 
    -Class1.php 
    -Class1Table.php 

Voir les répertoires de modèles supplémentaires? Qu'est-ce qui cause ça? J'ai essayé de jouer avec l'option doctrine.generate_models_options.classPrefix dans mon ini ainsi que le paramètre similaire dans mon fichier Bootstrap.php - $ manager-> setAttribute (Doctrine_Core :: ATTR_MODEL_CLASS_PREFIX, 'Model_');

Aidez-moi s'il vous plaît!

+0

Aussi, si je essayez et exécutez doctrine build-all-reload (au lieu de simplement générer les modèles avec generate-models-yaml), j'obtiens une erreur disant "Impossible de trouver la classe Model_User" Donc, une partie de ceci sait ce que les noms de classes devraient être, mais l'autre partie ne les crée pas correctement –

Répondre

1

Eh bien, je ne suis pas si intelligent une fois de plus. :(Tout ce qu'il était, était une mauvaise configuration de mon fichier schema.yaml.J'ai mis Model_User comme nom de modèle au lieu de juste utilisateur! Le fichier des appareils nécessite cependant être Model_User.Problème résolu

+0

Ce serait beaucoup plus facile si vous utilisiez [ZFDoctrine] (https://github.com/beberlei/zf-doctrine) – takeshin

+0

J'ai regardé dans ZFDoctrine et semblait trop pour ce que j'essayais de faire - semble être une bonne solution dans l'ensemble. –

Questions connexes