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/12/2011, 12h46   #1
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Par défaut Formulaire i18n: échec de la validation et de création de l'objet

Bonjour, j'ai un formulaire internationalisé d'après ce tuto, notamment dans sa partie "Comment passer la Culture de l'Utilisateur à un Formulaire ?". L'objectif c'est de ne proposer que les champs dans la langue de l'utilisateur. Tout d'abord, une partie de mon schema:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
entreprise:
  actAs:
    Timestampable: ~
    I18n:
      fields: [activite, description, is_validated]
  columns:
    nom:
      type:       string(255)
    activite:
      type:       string(255)
    description:
      type:       clob
    capital:
      type:       string(255)
    is_validated:
      type:       boolean
      default:    false
J'ai mis les codes de validation des champs "i18nisés" dans entrepriseTranslationForm.class.php et ceux des autres champs dans entrepriseForm.class.php. Mais quand je soumets le formulaires, il retourne le message d'erreur "required" pour les champs mise en required => true même si ceux-ci ont été bien remplis, avec un warning :
Code :
Warning: array_key_exists() [function.array-key-exists]: The first argument should be either a string or an integer in C:\wamp\www\entrepreneur\lib\vendor\symfony\lib\util\sfParameterHolder.class.php on line 53
Et quand je passe ces champs à required => false, l'objet n'est pas créé pour autant et le warning persiste et signe. Un autre message d'erreur qui persiste et signe dans les deux cas est celui que je découvre en cliquant le lien View de la debug toobar de symfony et qui affiche:
Code :
1
2
$form['_csrf_token'] (sfWidgetFormInputHidden)
Required.
Auriez quelques astuces pour réussir la validation de mon formulaire et la création de l'objet dans la langue de l'utilisateur ? Merci
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 19h05   #2
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
J'ai trouvé la cause de l'erreur. J'avais omis de faire
Code :
$this->widgetSchema->setNameFormat('entreprise[%s]');
100 coups de baton dans les mains, je mérite bien.
Par contre je suis aux prises avec une autre difficulté. En réalité le schéma que j'ai fourni ci-dessus n'était pas complet. Ma table entreprise est en relation n:n avec la table opération. Schéma complet:
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
entreprise:
  actAs:
    Timestampable: ~
    I18n:
      fields: [activite, description, is_validated]
  columns:
    nom:
      type:       string(255)
    activite:
      type:       string(255)
    image:
      type:       string(255)
    description:
      type:       clob
    capital:
      type:       string(255)
    is_validated:
      type:       boolean
      default:    false
  relations:
    operation:
      class: operation
      refClass: entrepriseoperation
      foreignAlias: entreprise
entrepriseoperation:
  columns:
    entreprise_id:
      type: integer
      primary: true
    operation_id:
      type: integer
      primary: true
  relations:
    entreprise:
      foreignAlias: entrepriseoperation
      onDelete: cascade
    operation:
      foreignAlias: entrepriseoperation
      onDelete: cascade
 
operation:
  actAs:
    I18n:
      fields:     [nom]
      actAs:
        Sluggable:
          fields:     [nom] 
          uniqueBy:   [lang, nom]
  columns:
    nom:
      type:       string(255)
Dans mon entrepriseActions, j'ai fait ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
public function executeNew(sfWebRequest $request)
  {
    $this->culture = $this->getUser()->getCulture();
 
	$this->op = Doctrine_Core::getTable('operation')->findBySlug($request->getParameter('slug'));
	$this->forward404Unless($this->op);
 
	$newEnt = new entreprise();
	$newEnt->setOperation($this->op);
 
	$this->form = new entrepriseForm($newEnt, array('culture' => $this->getUser()->getCulture()));
  }
puis dans le configure de entrepriseForm, je passe le champ operation_list en hidden:
Code :
'operation_list'             => new sfWidgetFormInputHidden(),
Ca marchait bien avant l'embed de la form i18n, mais depuis son intégration, ca ne marche plus. Mais quand je refais ceci:
Code :
'operation_list'             => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'operation')),
, ca marche bien. Or moi je veux absolument passer le operation_list en hidden. Une astuce, svp ? Merci
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 12h03   #3
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
Pourrais-tu être plus précis dans ce qui ne fonctionne plus ?
kenny.kev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 18h37   #4
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Ca renvoi une erreur Invalid sur operation_list. Dans le code source de la page, l'attribut value du champ entreprise[operation_list] contient "Array" au lieu de la valeur des opérations choisies.
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 19h10   #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
Tu as quoi dans ton html généré ?

A priori, je dirais qu'il te retourne un array parce que tu lui envoies un array !
__________________
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 00
Vieux 06/12/2011, 08h49   #6
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Welcome back toi, tu nous as manqué hein. Pour te répondre, voici le html:
Code :
<input type="hidden" name="entreprise[operation_list]" value="Array" id="entreprise_operation_list" />
Quelqu'un sur un autre forum m'a conseillé de ne pas mettre operation_list en hidden et de faire un display:non dessus en css. Je me demande si cette méthode est propre et pro
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 12h37   #7
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
[QUOTE]Quelqu'un sur un autre forum m'a conseillé de ne pas mettre operation_list en hidden et de faire un display:non dessus en css. Je me demande si cette méthode est propre et pro[QUOTE]

Non pas du tout propre et pro.

Çane viendrais pas de :
Code :
Doctrine_Core::getTable('operation')->findBySlug($request->getParameter('slug'));
Car par défaut ça retourne un tableau d'objet.
kenny.kev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h09.


 
 
 
 
Partenaires

Hébergement Web