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

Symfony PHP Discussion :

valider un élément dans sfDoctrineGuardPlugin [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 131
    Par défaut valider un élément dans sfDoctrineGuardPlugin
    bonjour a tous.

    J'ai rajouter un champ code client dans le formulaire d’inscription et j'aimerai qu'il vérifie si le code existe et si c'est vrai on continu le formulaire.
    hors pour le moment il me dis que le code existe déjà et qu'il faut que j'en donne un autre.
    si qqun peu m'aider merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Il n'y a pas de validateur qui permettent de valider qu'un enregistrement existe, il y en a un qui permet de vérifier qu'il n'existe pas et que tu as manifestement testé mais ce n'est pas le comportement que tu souhaites...

    Le mieux serait, à mon avis, de créer un dossier /lib/validator dans ton projet et d'y copier le validateur sfValidatorDoctrineUnique dans ce dossier (un recherche dans le dossier de symfony te permettra de localiser l'original à copier)

    En modifiant le doclean il doit être possible d'avoir le comportement souhaité.

    Il conviendra de modifier le nom du fichier copié ET celui de la class pour que cela puisse être pris en compte par l'autoload.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 131
    Par défaut
    super tu est trop fort

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 131
    Par défaut
    part contre il ne veut pas me prendre la class . lorsque j'ai modifer sfValidatorDoctrineUnique mon code marche et lorsque je copie se code dans un new class sfValidatorDoctrineCode dans lib/validator il me mais une error fatal????
    que faire

    voici le code
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    class sfValidatorDoctrineCode extends sfValidatorSchema
    {
      /**
       * Constructor.
       *
       * @param array  An array of options
       * @param array  An array of error messages
       *
       * @see sfValidatorSchema
       */
      public function __construct($options = array(), $messages = array())
      {
        parent::__construct(null, $options, $messages);
      }
     
      /**
       * Configures the current validator.
       *
       * Available options:
       *
       *  * model:              The model class (required)
       *  * column:             The unique column name in Doctrine field name format (required)
       *                        If the uniquess is for several columns, you can pass an array of field names
       *  * primary_key:        The primary key column name in Doctrine field name format (optional, will be introspected if not provided)
       *                        You can also pass an array if the table has several primary keys
       *  * connection:         The Doctrine connection to use (null by default)
       *  * throw_global_error: Whether to throw a global error (false by default) or an error tied to the first field related to the column option array
       *
       * @see sfValidatorBase
       */
      protected function configure($options = array(), $messages = array())
      {
        $this->addRequiredOption('model');
        $this->addRequiredOption('column');
        $this->addOption('primary_key', null);
        $this->addOption('connection', null);
        $this->addOption('throw_global_error', false);
     
        $this->setMessage('invalid', 'An object with the same "%column%" already exist.');
      }
     
      /**
       * @see sfValidatorBase
       */
      protected function doClean($values)
      {
        $originalValues = $values;
        $table = Doctrine_Core::getTable($this->getOption('model'));
        if (!is_array($this->getOption('column')))
        {
          $this->setOption('column', array($this->getOption('column')));
        }
     
        //if $values isn't an array, make it one
        if (!is_array($values))
        {
          //use first column for key
          $columns = $this->getOption('column');
          $values = array($columns[0] => $values);
        }
     
        $q = Doctrine_Core::getTable($this->getOption('model'))->createQuery('a');
        foreach ($this->getOption('column') as $column)
        {
          $colName = $table->getColumnName($column);
          if (!array_key_exists($column, $values))
          {
            // one of the column has be removed from the form
            return $originalValues;
          }
     
          $q->addWhere('a.' . $colName . ' = ?', $values[$column]);
        }
     
        $object = $q->fetchOne();
     
        // if no object or if we're updating the object, it's ok
        if ($object )
        {
          return $originalValues;
        }
     
        $error = new sfValidatorError($this, 'invalid', array('column' => implode(', ', $this->getOption('column'))));
     
        if ($this->getOption('throw_global_error'))
        {
          throw $error;
        }
     
        $columns = $this->getOption('column');
     
        throw new sfValidatorErrorSchema($this, array($columns[0] => $error));
      }
     
     
    }
    j'ai meme essayer une extends sfValidatorBase

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

Discussions similaires

  1. [CR 10] Centrer verticalement un élément dans une boîte
    Par Giovanny Temgoua dans le forum SAP Crystal Reports
    Réponses: 10
    Dernier message: 07/04/2005, 14h25
  2. [swing] disposition des éléments dans un GridLayout
    Par al85 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 11/02/2005, 17h36
  3. Comparaison de base et calculs du nombre d'éléments dans Bas
    Par BXDSPORT dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2004, 08h00
  4. Réponses: 14
    Dernier message: 01/12/2003, 17h47

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