Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-06-2008 18:34:25

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Zend_Row : catcher une exception lors d'un delete

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

Code:

$row->delete();

et là j'ai une exception. Alors j'ai pensé à utiliser

Code:

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

 

#2 05-06-2008 20:26:02

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_Row : catcher une exception lors d'un delete

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 :

Code:

catch (Zend_Exception $e) {

Hors ligne

 

#3 06-06-2008 09:42:48

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Zend_Row : catcher une exception lors d'un delete

Code:

catch(Zend_Db_Exception $e){
     //ton code
}

Mais sinon le Zend_Exception tout court marche, puisque toutes les exceptions étendent Zend_Exception wink

Hors ligne

 

#4 06-06-2008 09:58:02

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Zend_Row : catcher une exception lors d'un delete

ha d'accord ! Merci.

Hors ligne

 

#5 06-06-2008 10:11:10

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Zend_Row : catcher une exception lors d'un delete

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 :

Code:

$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

 

#6 09-06-2008 09:08:50

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Zend_Row : catcher une exception lors d'un delete

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

 

#7 09-06-2008 10:23:27

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Zend_Row : catcher une exception lors d'un delete

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)

Code:

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages