Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je saisis sur une première page un formulaire correspondant à des informations d'entete.
Je saisis sur une deuxième page un tableau de lignes.
A la validation de ma deuxième page, je dois enregistrer les informations d'entente et les lignes dans la bdd.
Je me demandais quelle était la meilleur façon de garder les données saisies en entête ?
(Tout en étant capable de gérer une éventuelle déconnexion, ou une navigation qui ne correspond pas à l'enchainement normal de saisie)
Je pensais au départ faire une transaction (ça c'est des habitudes des applications lourdes ), visiblement ce n'est pas possible de gérer une même transaction sur plusieurs pages avec zf.
Du coup de pensais à stocker les informations d'entête dans le registre, ou alors a les passer en paramètre à la deuxième page qui se chargerait de tout enregistrer à la validation finale.
Qu'en pensez vous ?
Hors ligne
Tu peux :
1 - Enregistrer les infos en session
2 - Enregistrer les infos dans les cookies
3 - Enregistrer les infos en BDD avec un flag
4 - Enregistrer les infos dans un fichier
...
les registres ne sont valable qu'au niveau de la page, elle ne seront pas passées automatiquement dans la page d'après.
Pour ce qui est de passer les infos en param, il ne faut pas oublié les limites de taille de $_GET
Hors ligne
Merci pour ta réponse.
Concernant le registre, je ne crois pas me tromper en disant que les données qui y sont stockées sont accessibles pendant toute la session.
http://framework.zend.com/manual/fr/zend.registry.html
Dernière modification par bertra (23-04-2008 18:40:29)
Hors ligne
ndesaleux a raison, les registres ne sont persistants que sur la durée d'une page. A mon avis il vaut mieux que tu cherches du coté des 4 pistes qu'il t'a envoyées.
Regarde en particulier les sessions à mon avis...
A+, Philippe
Hors ligne
A bon...Ca sert a quoi alors Zend_Registry ?
Je comprend plus la...
Hors ligne
Le Zend_Registry permet d'accéder à des objets ou autres variables n'importe ou dans ton application durant la durée d'éxecution de ton script seulement. Pour la persistance de données, il te faut passer par les sessions.
Dernière modification par apsy (24-04-2008 01:49:05)
Hors ligne
Le Zend_Registry permet d'accéder à des objets ou autres variables n'importe ou dans ton application durant la durée d'éxecution de ton script seulement. Pour la persistance de données, il te faut passer par les sessions.
Ha bon ? j'ai toujours cru que Zend_Registry utilisait des sessions. Mais pourtant, si je fais Zend_Registry::set('acl',$acl); j'ai accès à 'acl' durant toute la session non ?
Hors ligne
Oui, pareil pour moi.
Quelle est a différence entre session et exécution du script ?
Et puis ndesaleux dit bien que les infos stockées dans le registre ne sont pas passées de page en page ?
Dernière modification par bertra (24-04-2008 08:39:41)
Hors ligne
En gros, une valeur dans un registre est équivalent à une variable globale. Elle est disponible pendant toute la durée de l'exécution d'une page PHP.
La session dure plus longtemps, si l'internaute regarde 10 pages sur votre site, les données en sessions sont conservées pendant ces 10 pages. (c'est pas du ZF, c'est du PHP classique).
http://www.php.net/manual/fr/intro.session.php
A+, Philippe
Hors ligne
Bon, moi lorsque je stocke lors de l'exécution d'une page quelque chose dans le registre, je peux y accédez lors de l'exécution d'une autre page (donc dans ma session)
Donc comprend toujours pas....
Suis têtu hein ?
Hors ligne
Impossible, tu y accèdes parce que tu as enregistré l'objet dans le file d'exécution de script.
Hors ligne
je suis même allé jusqu'à tester pour vérifier...
testRegistryPage1.php
<?php set_include_path( ".;". "C:/users/levan/_boulot/phplib/ZendFramework-1.5.1/library;". get_include_path() ); require_once 'Zend/Loader.php'; Zend_Loader::loadClass("Zend_Registry"); Zend_Registry::set("valeur",12); echo "valeur in registry :".Zend_Registry::get("valeur",null); ?> <br/> <a href="testRegistryPage2.php">goto page 2</a>
et testRegistryPage2.php
<?php set_include_path( ".;". "C:/users/levan/_boulot/phplib/ZendFramework-1.5.1/library;". get_include_path() ); require_once 'Zend/Loader.php'; Zend_Loader::loadClass("Zend_Registry"); echo "valeur in registry :".Zend_Registry::get("valeur"); ?> <br/> <a href="testRegistryPage1.php">goto page 1</a>
tu as juste à corriger le include_path. Quand tu vas sur la page 2, tu as une belle exception disant que valeur n'existe pas dans la registry...
A+, Philippe
Hors ligne
Ha d'accord ! Ben là vous venez de répondre à un post que j'avais l'intention de poster. Je perds à un moment mon objet acl, alors qu'il se trouve dans le Registry.
Donc, il faut utiliser à la place les zend_session, c'est bien ça ? Ouhaaa, je vais devoir replonger dans mon code... Déprimant.
Merci pour ce test Phillipe.
Hors ligne
Ok, il faut que je regarde ça également.
En fait c'est le fait de stocker mon $db dans le registre et de le manipuler dans les autres pages qui m'avait amené à penser que les variables du registre étaient accessibles n'importe ou.
[eventuelle bétise]Mais je pense que c'est le fait que $db soit stocké par le bootstrpap qui fait ca non ?[/eventuelle bétise]
Hors ligne
Ok, il faut que je regarde ça également.
En fait c'est le fait de stocker mon $db dans le registre et de le manipuler dans les autres pages qui m'avait amené à penser que les variables du registre étaient accessibles n'importe ou.
[eventuelle bétise]Mais je pense que c'est le fait que $db soit stocké par le bootstrpap qui fait ca non ?[/eventuelle bétise]
c'est parceque tu restock toujours $db dans le registre, vue que ton bootstrap est exécuté chaque fois que ouvre une page.
Hors ligne
(faites gaffe de pas gaver vos sessions : dégradation rapide des perfs)
Je profite de ce post pour poser une question qui me turlupine...
Et les variables du bootstrap, y a t'il un moyen de les utiliser dans les controllers, sans avoir besoin de faire un registry?
Autre question sur le passage de param : y-a-t'il un moyen de connaitre l'URL précédente ou c'est à nous de le coder?
[Edit]
Réponse ici : http://www.z-f.fr/code/detail/14
[/Edit]
Dernière modification par Echo (09-05-2008 14:37:30)
Hors ligne