Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour
Ma question est certaine bête mais je n'ai jamais utilisé les try, catch. Voilà, lorsque je delete une ligne d'une table, si une autre ligne d'une autre table fait référence j'ai une exception s'il s'agit d'une clé étrangère (mon schéma de db ne gère pas le onCascade).
Bref, comment faire pour que si j'ai une exception, je la récupère est que l'application ne se plante pas ?
Par exemple voici ce code
$row->delete();
et là j'ai une exception. Alors j'ai pensé à utiliser
try{ $row->delete }catch(){ echo "suppression impossible"; }
mais je ne sais pas comment faire, ce que je dois mettre dans le catch()...
Pouvez-vous m'aider svp ? Merci d'avance.
Hors ligne
Dans ton catch(), tu dois mettre le nom de l'exception qui est générée suivi du nom d'une variable pour la récupérer.
Comme je ne connais pas le nom des exceptions par coeur, voici un exemple plus général :
catch (Zend_Exception $e) {
Hors ligne
catch(Zend_Db_Exception $e){ //ton code }
Mais sinon le Zend_Exception tout court marche, puisque toutes les exceptions étendent Zend_Exception
Hors ligne
ha d'accord ! Merci.
Hors ligne
Si jamais ton delete doit supprimer un nombre fixe d'élements à chaque fois, tu peut aussi vérifier ce que te retourne le delete(), pour savoir si ca a bien été supprimé, par ex :
$nbdel=$row->delete(); if($nbdel==1){ //ca a bien été supprimé; }else throw new MonException();
Comme ca tu est sur que ce que tu veux supprimer l'a bien été
Hors ligne
Re,
Stf: je n'ai pas encore testé ton code mais je me pose une question. Si c'est le delete() qui lance l'exception, je ne passerai pas dans le if() ?
Ma question est toujours dans le sens du delete(). J'ai donc cette exception car j'ai une relation 1..N et dans une table X ayant comme clé étrangère la clé primaire de la table Y, je ne peux pas supprimer une ligne Y si cette ligne est utilisé dans X. C'est clair ce que j'ai écris ? Non ? Parcequ'en fait c'est moi qui m'exprime comme un plouc mais c'est logique en fait !
Ceci dit, ce que je souhaiterai (dans la mesure du possible) : existe-il un moyen de savoir si la suppression est possible ou non avant d'appeler le delete() ? Car si j'ai une exception, ça veut dire que je dois la catcher, envoyer à la vue un nouveau message "suppression impossible", donc que mon action gère ce cas de figure, et donc un nouvel écran pour l'utilisateur.
Merci
Hors ligne
si tu fait :
le delete() lancera une exception si il y a erreur(liaison entre tables, ou erreur SQL), cependant, le delete peut tres bien marcher, mais ne rien supprimer(par ex un where jamais rempli)
try{ $nbdel=$row->delete(); if($nbdel==1){ //ca a bien été supprimé; }else //il n'y a pas eu d'erreur SQL, mais le delete() n'a rien supprimé(condition jamais remplie par ex) throw new MyException_deleteEmpty(); }catch(Zend_Db_Exception $e){ //envoi de l'erreur(suppr impossible), le delete() n'a pas pu etre fait }
PS : ca manque de coloration syntaxique ce code ^^
Hors ligne
Pages: 1