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 :

Personnalisation du form new


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut Personnalisation du form new
    bonjour à tous,

    je souhaite modifier le formulaire de création d'un nouvelle enregistrement,
    par exemple pour certain champs dateTime pouvoir imposer l'heure actuelle, et d'autres champs leur mettrent des valeurs par défaut de la base de donnée.

    Faut'il créer un nouveau formulaire ? si oui comment?
    avez vous des exemples sur le site de symfony car je n'ai pas trouvé d'information

    merci pour votre aide

  2. #2
    Membre émérite 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
    Par défaut
    Le formulaire généré par symfony devrait faire l'affaire.

    Pour y affecter les valeurs par défaut de ta base de données, il suffit je crois de notifier ces valeurs par defaut dans le schema (puis de refaire tourner les tâches doctrine:build-model / build-forms / build-filters).

    En ce qui concerne la date, tu peux affecter une valeur par défaut dans la méthode configure() de ton formulaire en appelant la méthode setDefault() sur ton widget.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    merci pour ton aide,

    pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->setDefault('requestDate', date('Y/m/d H:i:s'));
    c'est bon mais je souhaite que l'utilisateur ne puisse pas modifier l'information.
    J'ai donc mis unset mais malheureusement ça me désactive complétement le widget. Ensuite j'ai mit un 'is_hidden' => true sur le sfWidgetFormDate mais ça ne cache pas le widget il se retrouve tout en haut du formulaire sans label .

    Sinon pour les données en base ce n'est pas les données quand on souhaite faire une édition mais des données sur l'utilisateur logué. C'est a dire que quand il fait un nouvelle enregistrement je souhaite remplir automatiquement le nom de l'utilisateur logué dans le champs utilisateur du formulaire sans qu'il puisse le modifier, mais je ne sais pas trop comment faire.

  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
    La question est simple, mais la réponse, dans symfony, ne l'est pas.

    Je pars du principe que tu utilise un crud qui n'est pas un module d'administration.

    Première question, pour les dates de création et modification, pourquoi ne pas utiliser le behavior de doctrine timestamp ?

    Pour remplir un champ à la création d'un nouvel enregistrement, tu peux, soit faire comme tu l'as dis, soit créer un enregistrement vierge, mettre les valeurs et le lier lors de la création du form. Ceci permet de mettre les valeurs par défaut au niveau du modèle et non pas au niveau du form, ce qui est sémantiquement plus satisfaisant, et, si tu viens à utiliser un autre module qui crée de ces enregistrements, la procédure d'attribution du nom d'utilisateur y sera déjà renseignée.

    Reste l'affichage.
    Symfony ne sait pas gérer les champs a afficher et non modifier.
    Il y a plusieurs possibilités :
    • tu peux mettre l'attribut html readonly sur le champ. C'est simple à mettre en œuvre mais présente deux inconvénients majeurs. Premièrement, c'est une protection illusoire et un pirate pourra simplement modifier le message POST de retour en modifiant les valeurs. De plus, dans le cas d'un problème lors de la validation des données, les champs en readonly ne sont pas retourné et apparaissent donc vide.
    • la solution que j'utilise actuellement (pas top, mais elle marche) tu te paluche le formulaire à la main et tu récupères les données champs par champs avec des $form['champ']->render() et renderLabel et renderHelp,... et tu regardes s'il y a un message d'erreur, et tu mets le code qui va bien. Un partial permet de facilité la création d'une ligne standard. Pour les données non modifiables, tu procèdes de même, sauf pour le render que tu remplace par un getValue() a mettre en forme (notamment pour une date). Un peu long à mettre en œuvre, mais parfaitement sur.
    • La solution que j'aimerais essayer de mettre en œuvre, mais que je n'ai pas encore eu le temps de tester. La création d'un widget sfWidgetShowOnly et ces enfants, sfWidgetShowOnlyString, sfWidgetShowOnlyDate,... En modifiant la méthode render() et que celle là, on devrait pouvoir afficher des données simplement (comme la méthode deux) et facilement (comme la méthode un), le meilleur des deux mondes. Si tu as le courrage de t'y mettre, fait en ton premier plugin

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    merci pour ta réponse complète

    il est clair que ça ne serait pas mal un sfWidgetShowOnly

    pour le behavior de doctrine je ne connais pas donc je vais me documenter pour voir comment ça fonctionne.

  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
    Une table de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    usager:
      actAs:
        timestample
      columns:
        nom: string (40)
        prenom: string (40)
    va ta générer 5 champs, id, nom, prenom, created_at et modifed_at

    le champ id est de type integer auto-incrémenté.

    les deux champs created_at et modified_at sont de type timestamp, le created_at est mis à jour avec la date (et heure) de création de l'enregistrement, le modified_at avec la date (et heure) de la dernière modification.

    fun non ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    very fun
    je n'ai pas de mémoire je connaissais le principe mais vu que je ne l'ai jamais utilisé ça ne m'est pas venu à l'esprit.

    je me lance je te ferai part de mes futurs problèmes

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    bon j'ai fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      actAs:
        Timestampable:
    ça m'a bien généré mes deux nouveaux champs
    je recré mes modeles, puis j'ai du faire un unset car sinon ça me les affiches et le validateur est à required true

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            unset($this->validatorSchema['created_at']);
            unset($this->validatorSchema['updated_at']);
     
            unset($this->widgetSchema['created_at']);
            unset($this->widgetSchema['updated_at']);
    la date de création est bien enregistré mais quand je fait une édition et une mise a jour updated_at ne change pas ???

Discussions similaires

  1. [1.x] form new?value=3 ?
    Par erictomcat dans le forum Symfony
    Réponses: 10
    Dernier message: 16/09/2010, 09h20
  2. [1.x] Personnalisation du form de nouvelle enregistrement (new) ?
    Par symfony30000 dans le forum Symfony
    Réponses: 5
    Dernier message: 25/06/2010, 10h03
  3. Réponses: 2
    Dernier message: 01/06/2010, 17h53
  4. Personnaliser le menu "New"
    Par magicbisous-nours dans le forum Eclipse
    Réponses: 3
    Dernier message: 06/06/2009, 12h57
  5. Personnaliser New Form
    Par mschoum dans le forum SharePoint
    Réponses: 5
    Dernier message: 25/12/2007, 13h50

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