Je suivais le tutoriel de Introducing Doctrine 1.2 IntegrationZend Framework, Doctrine aide nécessaire
J'ai doctrine.php que "circuits fermés?" doctrine ... désolé, je ne comprends pas encore vraiment le tutoriel pour le moment.
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..'));
// 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']);
lorsque je tente de l'exécuter via cmd,
php.exe doctrine.php
J'obtenu
D:\Projects\ZF\doctrine\application\scripts>php -f doctrine.php
PHP Fatal error: Uncaught exception 'LogicException' with message 'Passed array does not specify an existing static met
hod (class 'Doctrine' not found)' in D:\Projects\ZF\doctrine\application\Bootstrap.php:7
Stack trace:
#0 D:\Projects\ZF\doctrine\application\Bootstrap.php(7): spl_autoload_register(Array)
#1 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Application\Bootstrap\BootstrapAbstract.php(662): Bootstrap-
>_initDoctrine()
#2 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Application\Bootstrap\BootstrapAbstract.php(622): Zend_Appli
cation_Bootstrap_BootstrapAbstract->_executeResource('doctrine')
#3 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Application\Bootstrap\BootstrapAbstract.php(579): Zend_Appli
cation_Bootstrap_BootstrapAbstract->_bootstrap('doctrine')
#4 D:\Projects\ZF\doctrine\application\scripts\doctrine.php(25): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap
('doctrine')
#5 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Loader.php(136): include('D:\Projects\ZF in D:\Projects\ZF\d
octrine\application\Bootstrap.php on line 0
Update 1
protected function _initDoctrine() {
$this->getApplication()->getAutoloader()
->pushAutoloader(array('Doctrine', 'autoload'));
spl_autoload_register(array('Doctrine', 'modelsAutoload'));
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);
$doctrineConfig = $this->getOption("doctrine");
$conn = Doctrine_Manager::connection($doctrineConfig['dsn']);
$conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true);
return $conn;
}
sous sql\_autoload\_register()
Je suppose. Je n'ai pas vraiment ce que spl\_autoload\_register()
aussi ... même en référence php.
Mise à jour 2
mon bootstrap.php
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initDoctrine() {
$this->getApplication()->getAutoloader()
->pushAutoloader(array('Doctrine', 'autoload'));
spl_autoload_register(array('Doctrine', 'modelsAutoload'));
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);
$doctrineConfig = $this->getOption("doctrine");
Doctrine::loadModels($doctrineConfig['models_path']);
$conn = Doctrine_Manager::connection($doctrineConfig['dsn'], 'Doctrine');
$conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true);
return $conn;
}
}
Je suppose que la chose ne fonctionne pas des thats est Zend ne semble pas autoload la classe Doctrine. que son supposé parce que je suis déjà inscrit l'espace de noms Doctrine dans config.ini
autoloaderNamespaces[] = "Doctrine"
Est-ce que cela signifie classes SHLD Doctrine autoload Zend? En ce qui concerne où Doctrine est stocké, je l'ai indiqué dans le chemin d'inclusion de PHP.
include_path = "; c:. \ Php \ comprend: D: \ ResourceLibrary \ cadres \ ZendFramework \ bibliothèque; D: \ ResourceLibrary \ cadres \ Doctrine121sandbox \ lib"
Je note que si dans _initDoctrine()
, j'ai besoin de Doctrine manuellement cela fonctionne.
require_once 'D:\ResourceLibrary\Frameworks\Doctrine121sandbox\lib\Doctrine.php';
at-il quelque chose à voir avec des fenêtres chemin (\ comme séparateur)
Avez-vous déjà été en mesure de résoudre ce problème? – sanders
pas réellement, je suppose que une solution temporaire était de mettre la bibliothèque de la doctrine dans le dossier de la bibliothèque du projet. il semble mettre la doctrine dans un dossier et inclure ce dossier dans php.ini ne fonctionne pas pour moi. J'utilise Windows 7, wamp 2 – iceangel89
Essayez d'utiliser https://github.com/beberlei/zf-doctrine si vous voulez être opérationnel en un rien de temps. La solution la plus simple et la plus complète (bien que non exempte de bugs) à l'intégration zend/doctrine que j'ai rencontrée jusqu'à présent. –