Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/06/2011, 12h08   #1
Membre confirmé
 
Inscription : février 2009
Messages : 317
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 317
Points : 209
Points : 209
Par défaut Suppression enregistrement référencé

Bonjour,
Voici l'exemple de ce que je veux faire :

Une voiture à une couleur et cette couleur est une table à part.
Dans la table voiture on a donc un attribut couleur_id.

Si on supprime une couleur et que celle ci est référencée dans la table voiture alors il y a une erreur.
C'est ce que je souhaite comme comportement (je ne souhaite pas mettre couleur_id à NULL par exemple). Par contre je voudrai avoir un message d'erreur propre et pas la page erreur500 de symfony...

Quel moyens ou outils avons nous pour faire cela ?
insane1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 16h54   #2
Membre habitué
 
Avatar de Maerlyn31
 
Homme Baptiste Naudinat
Développeur Web
Inscription : mai 2011
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Naudinat
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2011
Messages : 70
Points : 146
Points : 146
Hello,

Quel message d'erreur obtiens-tu exactement ? Passe en mode _dev pour le savoir si tu n'as pour l'instant que l'erreur 500.

Ensuite tout dépend de ce que tu souhaite comme "erreur propre".
Tu peux surcharger la page 500 pour en avoir une personnalisée qui affichera un message d'erreur choisi, ou bien arrêter l'exécution de l'action pour ne renvoyer qu'un texte/partial différent de celui d'origine, ou bien encore, si ton erreur est provoquée dans la vue (dans un template), tester ton champ couleur_id juste avant de l'afficher pour avoir un affichage différent selon qu'il est défini ou pas ...

Doctrine offre aussi des options interessantes pour gérer les suppressions qui impactent d'autres entités : va faire un tour sur http://www.doctrine-project.org/proj...ve-persistence ça te donnera peut être des idées
Maerlyn31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 17h23   #3
Membre confirmé
 
Inscription : février 2009
Messages : 317
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 317
Points : 209
Points : 209
Merci de ta réponse,
Il s'agit d'une erreur Mysql liée aux contraintes, ce qui est logique puisque j'essaye de supprimer un élément qui est référencé dans une autre table.

Je voudrais simplement que cela me remette sur la page précédente avec un setFlash() disant impossible de supprimer etc...
insane1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 08h50   #4
Membre habitué
 
Avatar de Maerlyn31
 
Homme Baptiste Naudinat
Développeur Web
Inscription : mai 2011
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Naudinat
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2011
Messages : 70
Points : 146
Points : 146
Alors je n'ai pas de modèle sous la main permettant de tester ce qui va suivre, mais je pense que ça devrait fonctionner :

Sur ta page d'erreur tu dois avoir le nom de l'exception ("Doctrine_Query_Exception" ou quelque chose du même genre). Note toi le, puis dans ton action, ajoute quelque chose comme :

Code :
1
2
3
4
5
6
7
8
......
try{
    $tonObjet->delete();    // Tu dois forcément avoir ce delete déjà quelque part pour supprimer l'objet
} catch (Doctrine_Query_Excetion $e) { // Ici remplace par l'exception que tu aura trouvé sur la page d'erreur 500
    $this->getuser()->setFlash('Erreur lors de la suppression');  // Envoi du message flash
    $this->redirect('@taPageDeRetour');
}
.....
Maerlyn31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h42.


 
 
 
 
Partenaires

Hébergement Web