Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Voici mon problème, j'ai intégré dans mon projet Zend, Doctrine 1.2
Tous fonctionne parfaitement lors de la création des models, de la bases et des tables à partir du CLI.
Mais lorsque je veux effectuer un enregistrement en utilisant mes models tous fraichement générés et avec le code suivant,
public function indexAction() { $user = new Application_Model_User(); $user->login = "matdevmx"; $user->passwd = "mypassword"; $user->save(); }
Je me retrouve avec deux enregistrements dans ma table.
A chaque fois que je fais un save() sur un models un me créé un doublon.
Voici mon fichier de Bootstrap
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function _initDoctrine() { $this->getApplication()->getAutoloader() ->pushAutoloader(array('Doctrine','autoload')); spl_autoload_register(array('Doctrine','modelsAutoload')); $doctrineConfig = $this->getOption('doctrine'); $manager = Doctrine_Manager::getInstance(); $manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL); $manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); $manager->setAttribute(Doctrine_Core::ATTR_AUTOLOAD_TABLE_CLASSES, true); $manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING,Doctrine_Core::MODEL_LOADING_CONSERVATIVE); $manager->setAttribute(Doctrine_Core::ATTR_MODEL_CLASS_PREFIX,'Application_Model_'); Doctrine_Core::setModelsDirectory(realpath(APPLICATION_PATH. '/models')); Doctrine_Core::loadModels($doctrineConfig['models_path']); $conn = Doctrine_Manager::connection($doctrineConfig['dsn']); $conn->setCharset('utf8'); $conn->setCollate('utf8_general_ci'); return $conn; }
et mon fichier de config
(...) autoloaderNamespaces[] ="Doctrine" doctrine.dsn = "mysql://root:@localhost/db_doctrine_test" doctrine.data_fixtures_path = APPLICATION_PATH "/doctrine/fixtures" doctrine.sql_path = APPLICATION_PATH "/doctrine/sql" doctrine.migrations_path = APPLICATION_PATH "/doctrine/migrations" doctrine.yaml_schema_path = APPLICATION_PATH "/doctrine/yml/schema.yml" 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 = "Application_Model_" (...)
Merci d'avance.
Hors ligne
Hello,
Tu es certain que c'est pas ton action de contrôleur qui est invoquée 2x ?
Essaie de mettre une trace dans ton action pour voir.
A+ benjamin.
Hors ligne
C'est aussi ce que je me suis dit mais je ne vois pas comment il pourrait appeler l'action 2 fois de suite, l'action index/index est la seul qui existe et il n'y a aucun forward ni redirect dans mon code.
Hors ligne
Je viens de tester ce code et effectivement, j'ai cette fois ci j'ai un seul enregistrement.
public function indexAction() { $table = Application_Model_UserTable::getInstance(); $myuser = $table->findOneByLogin('matdevmx'); if(!$myuser) { $user = new Application_Model_User(); $user->login = "matdevmx"; $user->passwd = "mypasswd"; $user->save(); } }
Ma question est donc maintenant comment puis je trouver l'origine du second appel à mon action index/index?
Dernière modification par MatDevMX (01-02-2011 10:18:38)
Hors ligne
Bon et bien j'ai résolu le problème. C'est tous simplement Webug - Version : 1.2.3 FirePHP extension for Google Chrome, qui me faisait un second appel à mon action, sans que je lui demande quoi que ce soit. Bizarre, car il me fait cet appel seulement avec ce site.
Hors ligne
Pages: 1