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 :

Personalisation de l'admin generator bonne ou mauvaise iddée? [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut Personalisation de l'admin generator bonne ou mauvaise iddée?
    Bonjour à tous,

    Je voudrais votre avis concernant la personnalisation de l'admin generator.

    Dans mon cas particulier j'ai un formulaire d'édition dont je dois récupérer la valeur d'une case à cocher. Si c'est true je ne fais rien. Par contre si c'est false dans le contrôleur il faut indiquer qu'il y a redirection de l'admin vers un autre écran. Dans cet écran je demande si l'admin est sur car cela entraine la suppression de donnée. S'il ne valide pas on ne fait rien sinon on efface.

    Selon vous est-ce préférable de faire ces actions dans l'admin générator ou plutôt dans un module non CRUD ?

    Petite question subsidiaire : vu que le code est généré automatiquement comment faire pour récupérer la valeur d'un de ces champs?
    J'ai bien sur fait ( dans mon contrôleur pour tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $information->getNomChamp
    mais j'obtiens l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Undefined variable $information
    Pourtant ce champ est bien enregistré dans ma BDD et l'admin generator me le propose par défaut dans le formulaire. Une chose est sur j'ai encore beaucoup à apprendre...

    En vous remerciant d'avance de vos réponses.

  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
    Dans mon cas particulier j'ai un formulaire d'édition dont je dois récupérer la valeur d'une case à cocher. Si c'est true je ne fais rien. Par contre si c'est false dans le contrôleur il faut indiquer qu'il y a redirection de l'admin vers un autre écran. Dans cet écran je demande si l'admin est sur car cela entraine la suppression de donnée. S'il ne valide pas on ne fait rien sinon on efface.
    Je ne suis pas sur de bien comprendre ta question. Par défaut, les boutons 'delete' présentés dans le backend généré par symfony proposent ce genre de sécurité. Si tu veux ajouter cette demande de confirmation sur le click du bouton 'mettre à jour', tu peux surcharger localement dans ton module le sfModelGeneratorHelper et sa fonction linkToSave(). Cf. dans ton cache le fichier _form_actions.php présent dans le dossier templates du module concerné.

    NB : Si la demande de confirmation dépend de l'état coché/vierge d'une case du formulaire, un bout de javascript devrait remplacer avantageusement l'appel à confirm() dans l'option onclick de la fonction link_to(). Du moins je le suppose, car je n'ai jamais essayé cette acrobatie.

    Undefined variable $information
    Si tu es dans un des partials de ton formulaire de modification, tu as accès à ton objet avec :
    Un code du type $information->blabla() est utile dans les partials de la page de liste (car cette page ne contient pas de formulaire), en supposant ici que le modèle traité par ta page est : Information.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Bonjour,

    Merci pour ta réponse Hérode. Je vais essayer ta solution.

    Par contre pour le champ dont je veux récupérer la valeur il s'agit d'un champ de type checkbox.
    Ce que je ne comprend pas comment faire c'est obtenir la valeur de champ dans mon contrôleur une fois que l'utilisateur à cliqué sur enregistré. Si je veux récupérer ce champ dans le contrôleur c'est que si c'est FALSE (décoché) je veux faire une redirection.

    $form->getObject()
    J'ai essayé mais ça me retourne 4 ( le nombre de champ du formulaire)

    En espérant avoir été plus clair

  4. #4
    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
    Dans la méthode executeMachinchouette() d'une action, les champs du formulaire se trouvent dans l'objet $request que tu reçois en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $params = $request->getPostParameters();
    donne accès au tableau associatif des champs, tu devrais trouver ton bonheur là-dedans.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Bonjour,

    Après avoir creusé un peu plus mon problème je m'aperçois que c'est la méthode save que je dois personnaliser. Pourquoi personnalisé la méthode save? Dans mon cas précis la personne remplie le formulaire le valide et donc enregistrement des éléments envoyés. Puisque mon traitement consiste à récupérer l'état d'un champ rempli par l'utilisateur la personnalisation du save me semble logique.

    J'ai été voir la doc officielle ( notamment http://www.symfony-project.org/forms...ne-Integration ) au paragraphe personnalisé la méthode save.

    Vu que je n'ai que un seul formulaire dans mon backend j'ai voulu faire une fonction save dans lib/form de la façon suivante :
    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
     
    class PhotoStatutForm extends BaseForm
    {
    public function save($request)
     {
     
        if ($request->isMethod('post'))
        {
          //$photo = $this->form->getObject()->getPhoto(); // c etait ma 1er façon de faire
         $this->photo($request->getParameter()->getPhoto());// ça c'est suite à l'indication donnée plus haut dans ce topic
          if ($this->photo == FALSE)
          {
            $this->redirect(@homepage);
          }
        }
        return parent::save($request);
    	  }
    }
    mais forcement ça ne fonctionne pas. Pire en mettant des die ou des exit dans le code rien ne se passe. Ce qui me fait penser que quand je clique sur save ca n'appelle même pas cette fonction.

    J'ai essayé dans le contrôleur du backend avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public function executeSave(sfWebRequest $request)
    	{
     if ($request->isMethod('post'))
        {
          $photo= $this->form->getObject()->getPhotoOk();
     
          if ($photo == FALSE)
          {
            $this->redirect(@homepage);
          }
        }
        return parent::save($request);
    	  }
    mais c'est un bel échec. Pourtant dans ma bdd les changements de champs sont bien enregistrés.
    Désolé de vous embêtez encore mais si quelqu'un peut m'éclairer de ses lumières.

    EDIT: en regardant dans la barre de debug, je me suis aperçu que je devais placer mon code dans le fichier AgentForm.class.php
    Maintenant quand j'y met le code de la fonction save j'ai comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Strict Standards: Declaration of AgentForm::save() should be compatible with that of sfFormObject::save()
    C'est pas exatement ce que je veux mais au moins le code est au bon endroit...

  6. #6
    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
    Si tu surcharges la méthode save() de ton formulaire, il faut en effet respecter la signature de la méthode mère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function save($conn = null)
    où $conn est de type Doctrine_Connection.

    Pas d'objet $request donc, et pas besoin de tester si la méthode est POST : le formulaire a déjà été initialisé et le test sur POST déjà fait - en amont - dans la méthode executeMachinchouette() de l'action invoquée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Personaliser le design d'un module généré par Admin Generator
    Par belgacem.tlili dans le forum Symfony
    Réponses: 3
    Dernier message: 01/08/2010, 13h41
  2. Réponses: 7
    Dernier message: 25/05/2008, 17h06
  3. [1.x] Champs i18n disabled par l'admin generator
    Par wadzat dans le forum Symfony
    Réponses: 1
    Dernier message: 22/05/2008, 14h51
  4. Réponses: 2
    Dernier message: 06/07/2007, 10h41
  5. Réponses: 4
    Dernier message: 31/10/2006, 09h12

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