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 :

admin generator et cle primaire


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 10
    Points
    10
    Par défaut admin generator et cle primaire
    salut

    dans les formlaires crée par l admin generator, je ne peut pas afficher mes cles primaires . (les input sont creer en hidden)


    mes cles primaires ne sont pas un id autoincrementer mais corresponde a un numero unique (7 chiffre + 1 Lettre)

    - je souhaite pouvoir creer cette clé manuellement en mode creation
    - l afficher seulement en mode edtion

    savez vous comment faire ca ?

    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Avant d'essayer des trucs bizarres, est-ce que ça ne pourrait pas plutôt être possible de créer une autre colonne que tu nommerais "ref" par exemple pour remplir le rôle que tu décris, et laisser le fonctionnement normal des vrais id de la base de données ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    justement, je voulais pas modifier les cles primaire de mes tables car ca va m obliger a reprendre toute mon appli qui est pratiquement terminé..

    je viens de trouver une solution en redefinissant le formulaire pour ce champ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class BackendMefForm extends MefForm
    {
    publicfunction configure()
    {
    parent::configure();
    
    $this->widgetSchema['code_mef'] = new sfWidgetFormInputText();
    
    $this->validatorSchema['code_mef'] = new sfValidatorString(array('max_length' => 11));
    
    }
    }
    

    ca marche bien en mode creation, le champ apparait
    par contre , il apparait aussi en mode edition et si je le modifie, ca fait une erreur... ce qui est normal

    comment le mettre en readonly en mode edition ?
    j ai essayer avec params: readonly="readonly" ca marche pas..

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->widgetSchema['code_mef'] = new sfWidgetFormInputText(array(), array('disabled' => 'disabled'));

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    merci

    ca marche bien sauf que en mode creation, mon champ est egalement disabled

    comment le reactiver dans generator.yml ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je pensais que tu aurais trouvé ça tout seul mais bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ($this->isNew())
    {
      $this->widgetSchema['code_mef'] = new sfWidgetFormInputText();
    }
    else
    {
      $this->widgetSchema['code_mef'] = new sfWidgetFormInputText(array(), array('disabled' => 'disabled'));
    }
    Ca devrait faire l'affaire ça

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    desolé , mais je debute sur symfony...je cherchais plutot dans le generator.yml...

    j'ai une autre probleme, comme ma clé primaire est composé de 2 champs,
    le lien qui est cree par l'admin generator porte seulement sur le 1er champ

    et du coup, je ne peut pas editer mes données dans le backend

    dans le template _list_td_tabular.php il y a le lien suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <?php echo link_to($mef_etab->getRneEtab(), 'mef_etab_edit', $mef_etab) ?>
    j essaye de redefinir le template mais je sait pas comment lui dire que le lien doit etre sur mes 2 champs $mef_etab->getRneEtab() et $mef_etab->getCodeMef()

    j' ai essayer ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php  echo link_to($mef_etab->getRneEtab(), 'mef_etab/edit?rne_etab='.$mef_etab->getRneEtab().'&code_mef='.$mef_etab->getCodeMef()) ?>
    mais ca me creer le lien suivant qui fonctionne pas
    mef_etab/0130001F/edit?code_mef=20010014112


    merci bcp pour ton aide

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je t'avoue que là je ne te suis pas. Pourquoi est-ce que tu ne pourrais pas éditer tes données ? Même si ta clé primaire est composée de deux champs, et même si je n'ai jamais essayé moi même, c'est censé pouvoir fonctionner.

    Par défaut, quel est le lien généré ? Qu'est ce que tu vois comme erreur si ça ne fonctionne pas ?

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    il n y a pas d erreur...

    le lien generé est http://localhost/affprem14/backend_d.../0130001F/edit

    ca m envoie en edition pour le numero d etab 0130001F et ca me place sur le le 1er code mef trouvé

    du coup tout mes liens pour mon etablissement 013001F me permette d editer seulement 1 seul et meme enregistrement


    je voudrais obtenir un lien du genre
    http://localhost/affprem14/backend_d...010014110/edit

    dans mon routing.yml
    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mef_etab:
      class: sfPropelRouteCollection
      options:
        model:                mef_etab
        module:               mef_etab
        prefix_path:          /mef_etab
        column:               rne_etab
        with_wildcard_routes: true
    (la doc de symfony dit que le champ column doit etre unique)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Et dans ton schema.yml pour mef_etab il y a quoi ?

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      mef_etab:
        _attributes: { phpName: Mef_etab }
        rne_etab: { type: varchar(8), required: true, primaryKey: true }
        code_mef: { type: varchar(11), required: true, primaryKey: true, foreignTable: mef, foreignReference: code_mef  }
        capacite: { type: integer, required: true }
        place_vacante: { type: integer, required: true }

  12. #12
    Invité
    Invité(e)
    Par défaut
    Edit: J'ai rien dit

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    avec column: rne_etab/:code_mef
    ca marche, ca me fait le bon lien

    http://localhost/affprem14/backend_d...112005112/edit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mef_etab:
      class: sfPropelRouteCollection
      options:
        model:                mef_etab
        module:               mef_etab
        prefix_path:          /mef_etab
        column:               rne_etab/:code_mef
        with_wildcard_routes: true

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut perte de l'information avec l'option 'disabled'
    Bonjour,

    Je reprends cette discution car je me suis basée sur la réponse de 'Tirkyth' qui permet d'afficher la clef primaire dans les pages new et edit du formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($this->isNew())
    {
      $this->widgetSchema['code_mef'] = new sfWidgetFormInputText();
    }
    else
    {
      $this->widgetSchema['code_mef'] = new sfWidgetFormInputText(array(), array('disabled' => 'disabled'));
    }
    i
    Ce code fonctionne très bien, mais j'ai un petit souci. Lorsque je modifie des éléments dans le formulaire Edit (éléments qui ne sont pas disabled), puis que j'enregistre mes modifications il ne garde pas les informations des imputText disabled. Par conséquent j'ai un "required" dans mon champ de la clef primaire, alors qu'il était présent.

    Comment puis-je supprimer ce problème ?
    Merci,

    Ophel

  15. #15
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Il a falu que je formule mon problème à l'écrit, pour que je trouve la solution.
    Je met la réponse car ça peut toujours aider quelqu'un (car cette petite chose m'a fait perde quelque temps...)
    Au lieux de mettre 'disabled' il faut mettre 'readOnly'.

    se qui devient pour le 'else' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->widgetSchema['code_mef'] = new sfWidgetFormInputText(array(), array('readOnly' => 'readOnly'));

  16. #16
    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
    ATTENTION !

    Les champs ainsi mis en lecture seul ne le sont pas réellement.

    Rien n'empêche un utilisateur averti ou un hacker d'utiliser un outils tel que firedebug pour modifier la donnée malgré le readonly sur le champ et donc d'envoyer une donnée correcte pour le validateur...

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Salut,

    J'ai essayer avec "disabled" et je peux tout de même changer le champ. C'est normal ?

  18. #18
    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
    Même avec readonly tu peux changer le champ... en utilisant un outil comme firebug.


    En fait la solution que j'utilise est de gérer le template à la main.

    Et d'utiliser pour chaque champ un ->renderRow()

    Et pour le champs en lecture seul,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <th><?php echo $form['monChamp']->renderLabel() ?></th>
    <td class="disabled"><?php echo $form->getObject()->getMonChamp()
    Ainsi tu n'a aucune donnée attendues en retour. Impossible de les modifier.

    Et les données sont envoyées à chaque génération du formulaire.

    Par contre, j'en conviens, la création du template est un peu plus lourde.


    L'autre solution serait de créer un widget dédié à l'affichage, j'y ai déjà pensé, mais, à l'époque, je n'avais pas les compétences pour le faire, maintenant, c'est le temps qui manque

    Faudrait partir d'un sfWidgetForm et en modifiant la méthode render. Possible que cela ne soit pas beaucoup plus compliqué.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/05/2011, 23h48
  2. [1.x] [admin-generator] éditer les clés primaires
    Par Mitaka dans le forum Symfony
    Réponses: 2
    Dernier message: 04/06/2008, 14h33
  3. Generation automatique de cle primaire
    Par miniseb dans le forum Oracle
    Réponses: 5
    Dernier message: 31/07/2006, 11h57
  4. [ db2 ] cle primaire autoincrement
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 25/02/2004, 14h20
  5. XSD, Cle primaire...
    Par Goupil dans le forum Valider
    Réponses: 3
    Dernier message: 21/10/2003, 09h04

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