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 Discussion :

Problème avec embedRelation


Sujet :

PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut Problème avec embedRelation
    Bonjour,

    S'autoformer à Symfony n'est pas de tout repos ! On solutionne un problème pour en découvrir un autre !

    Pour m'autoformer, je me fais une petite app de gestion des factures. Pour les factures j'ai deux modèles : un modèle Facture et un modèle Entree (une facture peut avoir plusieurs entrées, avec désignation et montant HT par exemple).

    Dans le configure() de FactureForm.class.php, j'ajoute une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->embedRelation("Entrees");
    où "Entrees" est l'alias donnés dans schema.yml.

    Ensuite quand je vais pour afficher le formulaire de création d'une nouvelle facture, j'ai bien l'entête "Entrées" dans une balise <th> mais je n'ai pas le formulaire correspondant en vis-à-vis.
    Pourtant si j'essaie d'afficher directement un formulaire d'entrée via .../frontend_dev.php/entree, j'ai bien ce formulaire...

    Je ne comprends pas trop en fait pourquoi ça ne marche pas; j'ai suivi un tuto à la lettre, ça fait deux heures que je cherche une solution mais ne trouve pas.

    Merci d'avance à celles et ceux qui me liront ainsi qu'à celles et à ceux qui sauront éclaircir mon esprit !

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    En fait, je me suis un peu trompé, la cellule <td> n'est pas totalement vide. Elle contient ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <table>
      </table><input type="hidden" name="facture[id]" id="facture_id" />
     
    <input type="hidden" name="facture[_csrf_token]" value="c7a33952c582467512ff16b5048cf93c" id="facture__csrf_token" />
    Pourquoi la balise <table /> est-elle vide ? Ne devrait-elle pas contenir mes deux champs désignation et montant HT ?

  3. #3
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Non. Dans ton cas, embedRelations() permet d'afficher les formulaires pour les objets qui existent déjà. Si tu as une facture avec deux entrées, quand tu éditeras cette facture, tu verras bien apparaitre deux formulaires (un par entrée).

    Quand tu es en création de facture, aucune entrée n'existe donc la liste des formulaires associés est vide. Si tu veux pouvoir ajouter une entrée en même temps que tu crées une facture, il faut que tu enchâsses à la main, dans FactureForm.configure() un formulaire EntreeFactureForm et que tu effectues quelques retouches pour que ça marche.

    Exemple dans : the More with Symfony / Advanced Forms

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    @ Herode : encore merci !

    Je le soupçonnais ! Donc je viens d'insérer un jeu de données test et ça m'a donc l'air bon pour la partie modification. Ca fait quand même plaisir !

    Et je vais donc me pencher sur le cas de la création a la mano...

    @ Herode : je suis certain que l'on va se revoir

  5. #5
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    S'autoformer à Symfony n'est pas de tout repos ! On solutionne un problème pour en découvrir un autre !
    Il n'y a pas de problèmes avec Symfony, que des réponses, qui, parfois, attendent d'être découvertes.

    As-tu fais le tutoriel Jobeet qui est, à mon avis, indispensable avant de commencer tout développement, même pour tester. Il permet de bien découvrir les fonctionnalités de bases du framework et les bonnes méthodes a utiliser.

    L'avantage de symfony c'est de partager les questions, et les réponses. Avec symfony, on appel cela des plugins. Je pense que le plugins : ahDoctrineEasyEmbeddedRelationsPlugin pourrait bien être celui qui te viendras en aide. Et va te révéler la grandeur de symfony.
    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 !

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Super ce plugin, ça fait ce que je voulais développer...

    Juste une question sur le paramètre obligatoire 'considerNewFormEmptyFields' : j'ai compris dans la doc qu'il s'agissait d'y indiquer les champs qui empêchent de créer un nouvel objet s'ils sont vides. J'ai fait le test avec mes deux champs 'designation' et 'montant_ht', mais le formulaire principal ainsi que les imbriqués "vides" ont été sauvés. Quand je réédite ma facture, j'ai bien l'entrée vide qui est venue s'ajouter... Alors je n'ai pas dû bien comprendre le paramètre peut-être.

    Autre question, qui concerne sans doute plus une façon de faire qu'un point technique particulier :
    une facture peut avoir plusieurs entrées. Mais à la création ou à l'édition, on ne sait pas réellement combien il va y en avoir. Quelle serait la meilleure démarche, selon vous, pour pouvoir ajouter des nouvelles entrées ? J'ai vu qu'il y a avait un paramètre 'newRelationButtonLabel' et un paramètre 'newRelationUseJSFramework'. Est-ce là un bon point de départ ? Le but étant de faire en sorte, autant que possible, de ne pas recharger toute la page à la création d'une nouvelle entrée.

    Merci d'avance

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Je n'ai jamais utilisé le plugin hors de test, donc je n'ai pas tout exploré...

    La seul application que j'ai faite de ce type était sans ce plugin, avec une liste des lignes, qui ouvrait sur un form de modification chacune et un form d'ajout de ligne en bas de page. Basic mais efficace.
    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 !

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Oui il est très bien ce plugin...

    Pour la méthode j'ai trouvé, le plugin gère ça très simplement avec un bouton pour créer un nouveau formulaire imbriqué. Super !!!

    Par contre je bloque toujours sur mon problème de "considerNewFormEmptyFields"... Ca devrait fonctionner d'après la doc du plugin.

    Le formulaire "nouvelle facture" présente bien un formulaire imbriqué pour enregistrer une nouvelle entrée. Normalement, si je remplis pas ce formulaire, il devrait être ignoré lors du traitement, mais il est quand même enregistré avec des valeurs nulles...

    Je glane sur le web, je vois que d'autres développeurs ont eu ce problème mais malheureusement, aucun début de réponse sur aucun forum !

    Je désespère, ça devrait être plus simple à lire la doc du plugin !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    J'avais le même problème que toi avec le "considerNewFormEmptyFields".
    Je n'ai rien trouvé sur le web concernant ça. Mais en faisant divers essais avec les différentes options, j'ai trouvé une combinaison qui fonctionne chez moi.
    Du coup je peux éditer mon formulaire principal, laisser le formulaire secondaire vide et enregistrer les modifications sans créer un nouvel enregistrement.

    Voici les options que j'utilise en plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $this->embedRelations(array(
          'adresses' => array(
            'considerNewFormEmptyFields' 	=> array('liste des champs affichés'),
        	'multipleNewForms'              => true,
            'newFormsInitialCount'          => 1,
        	'newFormAfterExistingRelations' => true
        ));
    En espérant que ça puisse t'aider.

    Eric

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 155
    Points : 76
    Points
    76
    Par défaut
    Merci,

    J'avais fait une petite pause dans ce projet pour relire la doc Jobeet... Pas mal de choses se sont éclaircies dans mon esprit.

    Je suis cependant surpris d'un problème que je rencontre en essayent un test fonctionnel sur mon formulaire, avec le champ client_id représenté par un sfWidgetFormDoctrineChoice, que je n'ai pas eu besoin de modifié. En fait dans l'environnement de développement, donc dans un navigateur normal, la création fonctionne très bien. Par contre dès que je lance un test fonctionnel, j'ai un message d'erreur qui m'indique que la valeur du champ client_id est invalide. J'ai pourtant indiqué la primary key du client :

    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
    get('/facture/new')->
    		  with('request')->begin()->
    				isParameter('module','facture')->
    				isParameter('action','new')->
    		  end()->
     
    		  click('Save',array(
    				'facture' => array(
    					 'numero'			 => 100,
    					 'prestation'	 => Intégration,
    					 'client_id'	 => 1,
    					 'devis'			 => true,
    					 'new_Entrees'	 => array(
    						  '0'	=> array(
    								'designation'	=> ActionScript,
    								'montant_ht'		=> 350
    						  )
    					 )
    				)
    		  ))->
     
    		  with('request')->begin()->
    				isParameter('module','facture')->
    				isParameter('action','create')->
    		  end()->
     
    		  with('form')->begin()->
    				hasErrors(false)->
    		  end()->
     
    		  with('form')->debug()
    J'obtiens le résultat suivant :

    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
    > 1 - Homepage
    # get /
    ok 1 - request parameter module is facture
    ok 2 - request parameter action is index
    > 2 - Post a new bill
    # get /facture/new
    ok 3 - request parameter module is facture
    ok 4 - request parameter action is new
    # post /facture
    ok 5 - request parameter module is facture
    ok 6 - request parameter action is create
    not ok 7 - the submitted form is valid.
    #     Failed test (./lib/vendor/symfony/lib/test/sfTesterForm.class.php at line 95)
    #            got: true
    #       expected: false
     
     
      Form debug                                                           
     
     
    Submitted values: array (  'id' => '',  '_csrf_token' => 'b005ce8ba402f89bb2eab2dd805ad85d',  'numero' => 100,  'prestation' => 'Intégration',  'devis' => true,  'new_Entrees' =>   array (    0 =>     array (      'designation' => 'ActionScript',      'montant_ht' => 350,    ),  ),  'client_id' => 1,)
    Errors: client_id [Invalid.]
    1..7
    # Looks like you failed 1 tests of 7.
    Pour 'Invalid' ??? Dans l'environnement de développement, le value du widget est bien 1 pourtant ....

  11. #11
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Je ne sais pas ce qu'elle est où, mais là, elle est "null"...

    Ce qui explique l'invalidité.

    Et le teste me semble bien écrit, donc l'erreur est ailleurs... Peut-être dans le form et les widget ? Ou dans la base de données utilisées pour les tests qui serait différente ?
    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 !

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Points : 13
    Points
    13
    Par défaut Problème d'affichage de formulaires imbriqués
    Bonjour, je poste ici ma question car c'est le sujet le plus approprié

    Voila, dans un formulaire, grâce à la fonction EmbedRelation('Matable') j'insère des champs , et lors de la validation le lien se fait automatiquement. a ce niveau la: OK .

    Le problème :

    les champs imbriqués (avec EmbedRelation() ) dans mon formulaire sont tous décalés ! et impossible de les aligner aux champs du formulaire initial (celui dans lequel j'ajoute les champs grace a EmbedRelation )

    ca me donne ca en fait :

    nom: [ ]
    prenom: [ ]


    .............dipositif [ ]
    .............lieu [ ]


    j'ai passé quelques heures (pour pas dire des journées) dans le Css, des les fichiers Form, Base, Model.... Introuvable !

    HELP !

  13. #13
    Membre éclairé Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Points : 816
    Points
    816
    Par défaut
    salut,

    Tu fais toi même le formulaire comme ça tu auras la présentation qui te correspond.

    Dans la document symfony il montre comment personnaliser un formulaire symfony.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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