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

Zend_Form PHP Discussion :

Populate qui ne fonctionne pas ou autre chose ? [ZF 1.11]


Sujet :

Zend_Form PHP

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut Populate qui ne fonctionne pas ou autre chose ?
    Bonjour,
    À partir du tutoriel "Débuter avec Zend Framework, approche MVC", j'ai réalisé un ensemble similaire déjà évoqué dans cette discussion.
    Pour rappel donc, j'ai le formulaire d'ajout ou de modification qui apparaît dans la même vue que le tableau de données, contrairement à l'exemple des albums du tutoriel.

    L'ajout se passe correctement mais pour la modification, la discipline choisie n'apparaît pas dans le formulaire de modification.

    Le formulaire :
    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
    class Application_Form_Discipline extends Zend_Form
    {
     
        public function init()
        {
            $baseurl = Zend_Controller_Front::getInstance()->getBaseUrl();
     
            $this->setName('discipline');
            $this->setMethod('post');
     
            // Identifiant de la discipline
            $dsc_id = new Zend_Form_Element_Hidden('dsc_id');
            $dsc_id->addFilter('Int');
     
            // Nom de la discipline
            $dsc_nom = new Zend_Form_Element_Text('dsc_nom');
            $dsc_nom->setRequired(true)
                    ->addFilter('StripTags')
                    ->addFilter('StringTrim');
     
            // Bouton Envoyer
            $envoyer = new Zend_Form_Element_Submit('envoyer');
            $envoyer->setLabel('Enregistrer');
     
            $this->addElements(array($dsc_id, $dsc_nom, $envoyer));
     
        }
    }
    Le modèle :
    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
    class Application_Model_DbTable_Discipline extends Zend_Db_Table_Abstract
    {
     
        protected $_name = 'te_discipline_dsc';
        protected $_primary = 'dsc_id';
     
        public function ajouterDiscipline($dsc_nom)
        {
            $data = array('dsc_nom' => $dsc_nom);
            return $this->insert($data);
        }
     
        public function modifierDiscipline($id, $nom)
        {
            $data = array(
                'dsc_nom' => $nom
            );
            $this->update($data, 'dsc_id = '. (int)$id);
        }
     
        public function obtenirDiscipline($id)
        {
            $id = (int)$id;
            $row = $this->fetchRow('dsc_id = ' . $id);
            if (!$row) 
            {
                throw new Exception("Impossible de trouver la discipline $id !");
            }
            $result = $row->toArray();
            return $result;
        }
     
    }
    Le contrôleur :
    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
        public function modifierAction()
        {
            $this->view->action = 'ajouter';
     
            $form = new Application_Form_Discipline();
            $form->dsc_nom->setLabel('Modifier le nom de la discipline en');
            $this->view->form = $form;
     
            $disciplines = new Application_Model_DbTable_Discipline();
            $this->view->disciplines = $disciplines->fetchAll();
     
            $this->renderScript('/gererdisciplines/index.phtml');
     
            if ($this->getRequest()->isPost()) 
            {
                $formData = $this->getRequest()->getPost();
                if ($form->isValid($formData)) 
                {
                    $dsc_id = $form->getValue('dsc_id');
                    $dsc_nom = $form->getValue('dsc_nom');
     
                    $discipline = new Application_Model_DbTable_Discipline();
                    $discipline->modifierDiscipline($dsc_id, $dsc_nom);
     
                    $this->_helper->redirector('index', 'gererdisciplines');
                }
                else 
                {
                    $form->populate($formData);
                }
            }
            else 
            {
                $dsc_id = $this->_getParam('dsc_id', 0);
     
                if ($dsc_id > 0) 
                {
                    $result = $disciplines->obtenirDiscipline($dsc_id);
                    var_dump($result);
                    $form->populate($result);
                }
            }
        }
    La vue :
    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
    <?php 
    $this->headTitle('Gérer disciplines'); 
    ?>
    <a href="<?php echo $this->url(array('controller' => 'accueilgestionnaire',
        'action' => 'index')); ?>">Retour à l'accueil gestionnaire</a><br />
    <?php if($this->action == 'index') : ?>
        <a href="<?php echo $this->url(array('controller' => 'gererdisciplines',
            'action' => 'ajouter')); ?>">Ajouter une discipline</a>
    <?php else : ?>
        <?php echo $this->form; ?>
    <?php endif; ?>
    <table>
        <tr>
            <th>Nom de la discipline</th>
            <th>&nbsp;</th>
        </tr>
    <?php foreach($this->disciplines as $discipline) : ?>
        <tr>
            <td><?php echo $this->escape($discipline->dsc_nom);?></td>
            <td>
                <a href="<?php echo $this->url(array('controller'=>'gererdisciplines',
                    'action'=>'modifier', 'dsc_id'=>$discipline->dsc_id));?>">Modifier</a>
                <a href="<?php echo $this->url(array('controller'=>'gererdisciplines',
                    'action'=>'supprimer', 'dsc_id'=>$discipline->dsc_id));?>">Supprimer</a>
            </td>
        </tr>
    <?php endforeach; ?>
    </table>
    J'ai mis un var_dump dans le contrôleur pour vérifier que je récupère bien les données et c'est le cas.
    Il semblerait donc que ce soit le $form->populate($result); qui n'opère pas comme il le devrait.

    Si dans la vue je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php else : ?>
        <?php echo $this->form; 
        var_dump($this->form->getValue('dsc_id'));?>
    <?php endif; ?>
    J'obtiens un magnifique int(0) !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Est-ce que les champs de ton formulaire son nommé exactement de la même façon que les champs de ta base ?
    Sinon le populate ne marche pas et tu doit faire la correspondance entre les noms de champs de ta base et ceux du formulaire


    Les boutons et existent, servez-vous en

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Oui elles (les colonnes de la table) s'appellent bien dsc_id et dsc_nom comme les champs du formulaire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Une piste peut-être...
    Dans l'affichage de l'écran de modification, j'ai le var_dump de la vue qui affiche int(0) juste après le formulaire, ce qui est normal, mais le var_dump du contrôleur donnant la valeur actuelle de la ligne à modifier n'apparaît qu'après le tableau des données, donc bien après le formulaire.

    Cela voudrait-il dire que le populate arrive trop tard, après l'affichage du formulaire ?
    Et si oui, comment changer ça ?

    EDIT :
    La piste était bonne !
    C'est l'instruction suivante qui arrivait trop tôt dans le script du contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->renderScript('/gererdisciplines/index.phtml');
    Je l'ai déplacée après les populate et ça fonctionne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Des boutons qui ne fonctionnent pas & autres galères !
    Par apierart dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/08/2013, 18h10
  2. test.exe qui ne fonctionnent pas sur les autres machines
    Par sboumediene dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/06/2011, 08h06
  3. Code Javascript qui ne fonctionne pas d'une page à l'autre
    Par Vict0 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 06/03/2011, 22h44
  4. exécutable qui ne fonctionne pas sur un autre ordinateur
    Par El_bennito dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 26/06/2009, 13h45
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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