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 02/07/2011, 18h22   #1
Futur Membre du Club
 
nicolas lefebvre
Inscription : mai 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : nicolas lefebvre

Informations forums :
Inscription : mai 2010
Messages : 72
Points : 18
Points : 18
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.
nlefebvre1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2011, 21h22   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/07/2011, 22h21   #3
Futur Membre du Club
 
nicolas lefebvre
Inscription : mai 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : nicolas lefebvre

Informations forums :
Inscription : mai 2010
Messages : 72
Points : 18
Points : 18
super tu est trop fort
nlefebvre1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2011, 23h00   #4
Futur Membre du Club
 
nicolas lefebvre
Inscription : mai 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : nicolas lefebvre

Informations forums :
Inscription : mai 2010
Messages : 72
Points : 18
Points : 18
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 :
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
nlefebvre1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 23h53   #5
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Même moi j'ai droit à un week-end, oui oui.

Bon, on est presque lundi alors...

Vérifie que tu as aussi changé le nom du fichier (pas juste la classe).

Fais un CC dans le CLI pour nettoyer le cache de l'autoload.

Regarde dans le dossier cache, dev (ou front) config tu as un fichier autoload quelque chose qui reprend ce que l'autoload à découvert. Regardes si tu y trouve ton fichier correctement renommé.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h13.


 
 
 
 
Partenaires

Hébergement Web