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 14/06/2011, 09h58   #1
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Par défaut Problème de champ vide dans la BDD (Postgresql). String '' plutot que champ vide

Bonjour,

Donc voilà, j'ai un formulaire, et lors de l'enregistrement de donnée (new ou edit), sur les champs non obligatoire, lorsque je ne rentre rien, il m'enregistre automatiquement des doubles quotes '' au lieu de laisser les champs null. Cela me pose un soucis sur un champ date puisqu'il veut me rentrer '' ce qui ne fait tous planter

Quelqu'un aurait t'il une idée sur pourquoi Symfony (ORM Doctrine) m'enregistre des doubles quotes sur des champs non renseignés ?

Merci d'avance
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h04   #2
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Enfin ma question est plutôt, comment ne pas sauvegarder un champ dans une base de donnée, lorsque celui ci est vide ?
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h04   #3
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
Malheureusement, c'est plus compliqué qu'il n'y parait. La question ressort d'ailleurs régulièrement.

Voir par exemple cette discussion sur les forums anglais qui aborde le sujet. Je n'ai pas testé la proposition de romain_godefroy (dernier post du fil au moment où j'écris), cela vaudrait le coup de modifier la classe ValidatorNullString pour vérifier.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 17h29   #4
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Merci pour ta réponse.

Alors j'ai tester la solution proposé par romain_godefroy. Cela ne marche pas car symfony ne connais pas le ValidatorNullString.

Du coup ca m'a donner une idée, j'ai été voir dans les fichiers de base de symfony. Dans le dossier "/lib/vendor/lib/validator/" et le fichier "sfValidatorString.class.php" puisque mes champs sont des Strings.

J'avais :

Code :
1
2
3
4
5
6
7
8
9
10
protected function configure($options = array(), $messages = array())
  {
    $this->addMessage('max_length', '"%value%" is too long (%max_length% characters max).');
    $this->addMessage('min_length', '"%value%" is too short (%min_length% characters min).');
 
    $this->addOption('max_length');
    $this->addOption('min_length');
 
    $this->setOption('empty_value', '');
  }
et j'ai remplacé :
Code :
    $this->setOption('empty_value', '');
par :

Code :
    $this->setOption('empty_value', null);
Du coup ca marche, il m'enregistre les données en null du coup. Solution peut-être pas très propre, mais très efficace ^^
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/06/2011, 22h48   #5
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
Bien vu !

Ce n'est pas propre si tu modifies le code du sfValidatorString en effet, mais en dérivant cette classe de base, en surchargeant le configure() et en utilisant le nouveau validateur, ce sera propre et portable.

D'ailleurs, je m'en vais de ce pas adapter ton idée sur le ValidatorNullString que j'utilise.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 09h15   #6
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Si tu pouvais me montrer ton résultat final, ca serait sympa Puis ca pourrais sans doute servir à d'autre
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 09h36   #7
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
Ho, ce à quoi je pensais était extrêmement simple grâce à ton idée :
Code :
1
2
3
4
5
6
7
8
class ValidatorNullString extends sfValidatorString {
 
  protected function configure($options = array(), $messages = array()) {
    parent::configure($options, $messages);
    $this->setOption('empty_value', null);
  }
 
}
Mais la nuit portant conseil, il me semble qu'il y a plus simple encore. Pas besoin de créer une classe pour ça, il suffit de paramétrer le sfValidatorString dans la méthode configure() des formulaires concernés :

Code :
1
2
3
4
5
6
7
8
9
class MyForm extends BaseMyForm {
 
  public function configure() {
    // blablabla...
    $this->validatorSchema['mystring']->setOption('empty_value', null);
    // blibloblu...
  }
 
}
Herode est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 15/06/2011, 11h26   #8
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
ahh oui, c'est évident, je n'y avais pas pensé. Merci
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h08.


 
 
 
 
Partenaires

Hébergement Web