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 :

Embedform, comment réussir


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut Embedform, comment réussir
    J'ai deux tables Emission et Articles qui sont respectivement en relation 1:n avec la table ressources qui est censée recevoir les données des deux premières tables. Ce rassemblement est utile pour d'autres fonctionnalités sur mon site. Voici le schéma.
    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
     
    emission: 
      columns: 
       membre_id: 
        type: integer
        notnull: true
       titre: 
        type: string(255)
        notnull: true
        unique: true
       sous_titre: 
        type: string(255)
      relations: 
       membre: 
        local: membre_id
        foreign: id
       ressource:
        local: id
        foreign: emission_id
     
    memo: 
     columns: 
      membre_id: 
       type: integer
      titre: 
       type: string(255)
       notnull: true
       unique: true
      texte: 
       type: clob
       notnull: true
     relations: 
      membre: 
       local: membre_id
       foreign: id
      ressource:
       local: id
       foreign: memo_id
     
     
    ressources:
      columns:
        emission_id:
          type: integer
        memo_id:
          type: integer
        titre:
          type: string(255)
        nature:
          type: enum
          values: ['1','2']
      relations:
        emission:
          local: emission_id
          foreign: id
          foreignType: one
          onDelete: cascade
        memo:
          local: memo_id
          foreign: id
          foreignType: one
          onDelete: cascade
    Je voudrais que lorsque j'enregistre une émission ou un article, les données appropriées soit sauvegardées en même temps dans la table ressources. j'ai donc fait un embedForm comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // emissionForm.class.php
     
    $res = new Ressources();
    $res->setEmission($this->getObject());
    $resform = new ressourcesForm($res);
     
    $this->embedForm('Ressources', $resform);
    Ca enregistre bien dans la table ressource, mais le champ emission_id est a NULL, et quand on édite l'émission, ca ajoute une nouvelle entrée dans la table ressources (avec cette fois la bonne valeur dans emission_id). Alors mes questions:

    1) Comment faire pour remplir le champ emission_id de la table ressource lors de la création d'une émission ?

    2) Comment éviter la multiplication à chaque édition d'une émission ?

    3) Comment sauver la valeur du champ titre du formulaire emission dans le champ titre de la table ressource et unset ce dernier dans le formulaire ressources imbriqué ? Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Par défaut
    Citation Envoyé par etoileweb Voir le message
    J'ai deux tables Emission et Articles qui sont respectivement en relation 1:n
    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
    emission: 
      columns: 
      [...]
      relations: 
       ressource:
        local: id
        foreign: emission_id
     
    ressources:
      columns:
        emission_id:
          type: integer
      relations:
        emission:
          local: emission_id
          foreign: id
          foreignType: one
          onDelete: cascade
    Ce n'est pas une relation (1:n).
    Tu n'as pas besoin de référencer ton article dans émissions s'il y en a 'n'...

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut
    Tu as raison, c'est pas des relations 1:n. En revanche, je crois que Michel Rotta ne m'a pas compris. Le morceau du emissForm que j'ai affiché est unique la partie ou je réalise le embedForm.

  4. #4
    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
    Lol, j'ai vu tellement de truc bizares en tous genres et de tous sur le forum, que, effectivement, j'ai parfois du mal à comprendre du premier coup.

    Bon, en fait tu as une relation n-n entre emission et memo avec ressources comme table de liaison pourvue de trois arguments... Et tu veux, dans le form emission, pouvoir saisir un lien et ces arguments vers un mémo.

    Le shema.yml tel que je l'aurais fait, pour les commentaires, je les ai déjà largement distribué, 23:45, je fais la grève accessoirement, il y a deux fois des relations vers une table membres, qui ne fait pas partie de l'extrait du schéma que tu as donné, à mon avis, les relations entre membre et les deux autres tables sont aussi à réécrire dans la même idée que celles de ressource.
    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
     
    emission: 
      columns: 
       membre_id: 
        type: integer
        notnull: true
       titre: 
        type: string(255)
        notnull: true
        unique: true
       sous_titre: 
        type: string(255)
      relations: 
       membre: 
        local: membre_id
        foreign: id
     
    memo: 
     columns: 
      membre_id: 
       type: integer
      titre: 
       type: string(255)
       notnull: true
       unique: true
      texte: 
       type: clob
       notnull: true
     relations: 
      membre: 
       local: membre_id
       foreign: id
     
    ressource:
      columns:
        emission_id:
          type: integer
        memo_id:
          type: integer
        titre:
          type: string(255)
        nature:
          type: enum
          values: ['1','2']
      relations:
        emission:
          local: emission_id
          foreign: id
          foreignAlias: ressources
          onDelete: cascade
        memo:
          local: memo_id
          foreign: id
          foreignAlias: ressources
          onDelete: cascade
    Pour la liaison, c'est plus gênant. En général, les embed sont "plutôt" conçu pour éditer des enregistrement liés existant que pour en créé, justement à cause de ce problème de numéro de Id.

    Si tu veux la possibilité de créer une nouvelle ressource, liée à ton emission, je pense que le plus simple est de créer deux formulaires dans ta page, un avec l'objet emission et, éventuellement, les objets ressources déjà existants. Un deuxième, indépendant, avec un nouvel objet ressource, traité par une action différente. a ce niveau là, l'objet ressource initial peut être lié de deux manières :
    • lors de la création (new) de l'objet, tu lui donne l'id de l'objet émission, avant de le lier au form :
      $newRessource->setEmissionId( $emission->getId() )
    • dans le liens du bouton de validation du deuxième formulaire, qui sera piloté par un route adéquat, tu rentres le numéro de l'objet émission parent, que tu peux alors récupérer dans l'action pour compléter avant la sauvegarde. (j'aime moins).

    ATTENTION ! ces deux solution sont limite niveau sécurité, il est possible pour un utilisateur malveillant de modifier le numéro de l'objet emission et, dans ce cas, de créer un objet ressource pour n'importe quel objet émission.

    La solution finale restant d'intégrer l'id de l'objet émission temporairement dans le container de l'objet user et de vérifier la concordance avec ce qui est donné plus haut. Seul petit problème, un utilisateur ne peut modifier plus d'un objet émission simultanément.

    Tu as aussi un plugin qui peut être intéressant : ahDoctrineEasyEmbeddedRelationsPlugin il pourra te permettre, peut-être, de t'approcher de ce que tu recherches.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Tu as aussi un plugin qui peut être intéressant : ahDoctrineEasyEmbeddedRelationsPlugin il pourra te permettre, peut-être, de t'approcher de ce que tu recherches.
    Bonsoir,

    Tu crois que ce plugins peut m' aider pour mon cas ?

    http://www.developpez.net/forums/d99...e-multi-table/

  6. #6
    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
    @mantex, répondu dans le message d'origine pour ne pas polluer celui-ci.

Discussions similaires

  1. [Conseils] Comment réussir votre entretien d'embauche
    Par Benji76 dans le forum Entretien
    Réponses: 49
    Dernier message: 26/09/2023, 00h13
  2. Comment réussir un entretien d'embauche ?
    Par Melvine dans le forum Entretien
    Réponses: 80
    Dernier message: 18/11/2013, 14h40
  3. [VB6 > VB.Net] Comment réussir la migration pour utilisation sous VS2003 ?
    Par sympatique dans le forum Accès aux données
    Réponses: 3
    Dernier message: 15/08/2006, 21h32
  4. [C#] Comment réussir un simple select ?
    Par berceker united dans le forum Accès aux données
    Réponses: 11
    Dernier message: 24/07/2006, 17h57
  5. [C#] Comment réussir une transformation XSL ?
    Par ashurai dans le forum C#
    Réponses: 6
    Dernier message: 03/03/2006, 17h06

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