- 1
[Opened] [Résolu][Jelix 1.1.2] Gestion erreur sur saveToDao
Posted by Yann.L on 05/06/2009 11:33
Bonjour,
Je tente de gérer une erreur suite a un $form->saveToDao
Voila comment je m'y suis pris :
Dans l'action de mon contrôleur je fais :
function save(){ ... try { $form->saveToDao('emplacement~vivier'); } catch (jException $e) { jMessage::add($e->getMessage()); } $rep = $this->getResponse('redirect'); $rep->action = "emplacement~vivier:end"; $rep->params = array('vivierId' => $this->param('fk_vivierId')); return $rep; }
Seulement voila quand je test pour lever une erreur j'ai le droit quand même a l'affichage d'erreur comme :
[warning 2] mssql_query() [<a href='function.mssql-query'>function.mssql-query</a>]: message: Violation of PRIMARY KEY constraint 'PK__r_vivier_has_emp__4BAC3F29'. Cannot insert duplicate key in object 'dbo.r_vivier_has_emplacement'. (severity 14) C:\xampp\htdocs\jlx\tpgs\plugins\db\mssql\mssql.dbconnection.php 128 [warning 2] mssql_query() [<a href='function.mssql-query'>function.mssql-query</a>]: Query failed C:\xampp\htdocs\jlx\tpgs\plugins\db\mssql\mssql.dbconnection.php 128
Là c'est typiquement le cas où l'utilisateur affecte un collaborateur à un site au quel il est déjà affecté.
Et quand je fais un retour arrière avec mon navigateur l'erreur est correctement affiché par jMessage.
Dois je faire un test avant le saveToDao() sur l'existence ou non des informations a enregistrer ? Ou bien j'ai mal utilisé jException ?
Merci & Bon dev
[Opened] Re: [Jelix 1.1.2] Gestion erreur sur saveToDao
Posted by laurentj on 05/06/2009 11:39
Salut,
les warning en questions sont généré par les fonctions en questions, et ce ne sont pas des exceptions. Je ne peut rien y faire sauf à mettre des @ dans le driver mssql peut etre.
Dois je faire un test avant le saveToDao() sur l'existence ou non des informations a enregistrer ?
ça me parait logique de le faire en tout cas...
[Opened] Re: [Jelix 1.1.2] Gestion erreur sur saveToDao
Posted by Yann.L on 05/06/2009 14:21
En faite je crois que j'avais mal lu la doc sur jForm et la méthode saveToDao()
Tout comme il y a initFromDao pour initialiser le formulaire, il y a l'opération inverse saveToDao. Cette méthode permet donc d'enregistrer plusieurs champs via un dao. Les valeurs des champs dont les noms correspondent à des propriétés du dao indiqué seront utilisées pour renseigner les propriétés du dao correspondantes, et le tout sera enregistré dans l'enregistrement dont la clé est indiquée dans l'id du formulaire. Si l'id du formulaire est inexistant, un nouvel enregistrement sera créé, plutôt qu'une mise à jour d'un enregistrement existant.
Je croyais avoir lu que saveToDao faisait le check tous seul de savoir si l'enregistrement existe ou pas ^^
Enfin merci quand même Laurent.
- 1