IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Doctrine] Forms et mise à jour manuelle de la valeur d'un champs


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut [Doctrine] Forms et mise à jour manuelle de la valeur d'un champs
    Hello,

    J'ai créé un écran qui me sert à uploader un fichier, j'ai une table en BDD dans laquelle je souhaite conserver la liste des uploads, j'ai donc fait un

    symfony doctrine:build-forms

    et j'utilise la Doctrine Form générée, l'upload se passe bien et j'ai bien une ligne ajoutée dans ma table à chaque upload.

    Maintenant je veux ajouter un ou plusieurs champs dans ma table mais que ces champs ne soient d'une part pas saisis par l'utilisateur (je pense faire un unset dans le configure de ma form) mais en plus je souhaite pouvoir valoriser moi même la valeur de ce/ces champs pour qu'ils soient sauvegardés en base lors du

    $this->form->save()

    Ca fait un bon moment que je cherche sur le web mais je n'arrive pas à trouver comment valoriser le/les champs et OU le faire. De même comment accéder à la valeur des autres champs qui ont été saisis par l'utilisateur ?

    Merci

    François

  2. #2
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Salut,

    Je pense que tu peux utiliser ton formulaire par défaut.

    Si tu ne veux pas overrider ta méthode save(), tu peux changer le type de tes widgets en hidden et utiliser la méthode setDefault(s) de la classe sfForm.

    Comme ça, pas besion de coder une nouvelle méthode save()...

    En espérant t'avoir aidé.

    A+

    Mathieu

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Bonjour Mathieu

    Je lisais justement une de tes réponses sur les Hierarchical trees avec Doctrine qui me sera probablement utile :-)

    En fait je vais utiliser un champ hidden pour stocker le userid qui a fait l'upload (pas dangereux ?) mais je souhaite aussi stocker le nom du fichier tel que stocké sur le serveur et le nom du fichier tel que connu coté client, je pense qu'il me faut donc surcharger le save($conn=null)

    Question:

    Est-ce le bon prototype ? --> save($conn=null)

    Comment accéder aux champs à valoriser dans le save, un $this quelque chose mais quoi ? Y-a-t-il des setters/getters ? -> J'ai essayé un $this->setValue('clientImageName') et setClientImageName(valeur) mais ca plante.

    Merci

  4. #4
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Salut,

    Pour le userId, je penserais plutôt à passer ceci en session.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $this->getUser()->setAttribute('userId', $userId);
     
    $this->getUser()->getAttribute('userId');
    Peux être dans un serialize et/ou base64_encode.

    Pour le reste un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $this->widgetSchema->setDefault('ton_widget');
     
    // ou
     
    $this->widgetSchema->setDefaults(array('ton_widget', 'ton_widget1'));
    Si tu utilises cette méthode pas besion d'overrider la méthode save().

    D'ailleurs, c'est save(), de mémoire si je ne m'abuse.

    Mais cette méthode est à bannir en théorie car si tu change ta table, c'est patatra...

    A+

    Mathieu

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Bonjour Mathieu,

    Le userid ira dans la session bien sur merci pour ce rappel de bon sens :-)

    Concernant l'autre valeur l'utilisation d'un setdefault ne m'irait pas je pense car il faut placer cette instruction dans le configure de la form donc avant que les valeurs soient renseignées par l'utilisateur et validées par symfony. Ce que je veux c'est pour l'instant récupérer le OriginalName du fichier uploadé pour le stocker en base. Alors j'ai utilisé un post validator dans la form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
      
    public function configure()
      {
        unset( $this['created_at'] );
    
        $this->widgetSchema['server'] = new sfWidgetFormInputFile(array(
            'label' => 'Image(s)',
        ));
    
        $this->widgetSchema['client'] = new sfWidgetFormInputHidden();
    
        $this->validatorSchema['server'] = new sfValidatorFile(array(
            'required'      => false,
            'path'          => sfConfig::get('...'),
            'max_size'      => sfConfig::get('...'),
            'mime_types'    => 'web_images',
        ));
    
        $this->validatorSchema['client'] = new sfValidatorString(array('required' =>false));
    
        $this->widgetSchema->setNameFormat('upload[%s]');
    
        $this->validatorSchema->setPostValidator(
            new sfValidatorCallback(array('callback' => array($this, 'postValidator')))
        );
      }
    
      public function postValidator($validator, $values)
      {
        $values['client'] = $values['server']->getOriginalName();
        return $values;
      }
    Merci encore pour ton aide

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/04/2014, 11h02
  2. Réponses: 4
    Dernier message: 09/10/2010, 00h18
  3. Réponses: 6
    Dernier message: 31/05/2007, 21h29
  4. Réponses: 7
    Dernier message: 02/03/2007, 09h37
  5. debogage, form pas mise à jour
    Par LauBelette dans le forum Windows Forms
    Réponses: 7
    Dernier message: 25/02/2007, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo