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 :

Formulaire ajouter/modifier dans même écran que tableau de données [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 Formulaire ajouter/modifier dans même écran que tableau de données
    Bonjour,
    Soit une vue montrant le contenu d'une table composée simplement d'un identifiant et d'un nom. La vue affiche un tableau avec une colonne Nom et une colonne où se trouvent les actions Modifier et Supprimer, comme dans le tutoriel "Débuter avec Zend Framework, approche MVC".

    Mais comme il n'y a qu'une seule colonne à alimenter lorsqu'on ajoute ou modifie une donnée, je trouve ça un peu lourd de créer un écran spécialement pour ça.

    J'ai créé un formulaire tout simple muni d'un Zend_Form_Element_Text et d'un bouton que j'arrive à afficher dans le même écran que le tableau de données.
    Mais comment gérer les actions ajouter et modifier ?

    J'ai essayé ce qui suit...
    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
    class Application_Form_Discipline extends Zend_Form
    {
     
        public function init()
        {
            $baseurl = Zend_Controller_Front::getInstance()->getBaseUrl();
     
            $this->setName('discipline');
            $this->setMethod('post');
     
            // Nom de l'étudiant
            $dsc_nom = new Zend_Form_Element_Text('dsc_nom');
            $dsc_nom->setLabel('Nom de la discipline')
                    ->setRequired(true)
                    ->addFilter('StripTags')
                    ->addFilter('StringTrim');
     
            // Bouton Envoyer
            $envoyer = new Zend_Form_Element_Submit('envoyer');
            $envoyer->setLabel('Enregistrer');
     
            $this->addElements(array($dsc_nom, $envoyer));
     
        }
    }
    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>
    <?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', 'id'=>$discipline->dsc_id));?>">Modifier</a>
                <a href="<?php echo $this->url(array('controller'=>'gererdisciplines',
                    'action'=>'supprimer', 'id'=>$discipline->dsc_id));?>">Supprimer</a>
            </td>
        </tr>
    <?php endforeach; ?>
    </table>
    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
    class GererDisciplinesController extends Zend_Controller_Action
    {
     
        public function init()
        {
            /* Initialize action controller here */
        }
     
        public function indexAction()
        {
            $this->view->title = "Gérer les disciplines d'enseignement";
            $disciplines = new Application_Model_DbTable_Discipline();
            $this->view->disciplines = $disciplines->fetchAll();
            $this->view->action = 'index';
     
            $form = new Application_Form_Discipline();
            $this->view->form = $form;
        }
     
        public function ajouterAction()
        {
            $this->view->action = 'ajouter';
     
            $form = new Application_Form_Discipline();
     
            if ($this->getRequest()->isPost()) 
            {
                $formData = $this->getRequest()->getPost();
                if ($form->isValid($formData)) 
                {
                    $dsc_nom = $form->getValue('dsc_nom');
     
                    $discipline = new Application_Model_DbTable_Discipline();
                    $dsc_id = $discipline->ajouterDiscipline($dsc_nom);
                }
                else 
                {
                    $form->populate($formData);
                }
            }
        }
    }
    Lorsque j'arrive sur la vue index, le lien "Ajouter une discipline" s'affiche, c'est bon. Mais si je clique sur le lien, il cherche la vue ajouter.phtml.
    Message: script 'gererdisciplines/ajouter.phtml' not found in path (/var/www/html/stagmas/application/views/scripts/)
    Que faut-il faire pour lui dire de rester dans la même vue index ?
    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
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    essaye avec un $this->_redirect('index') ou $this->render('index')

  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
    Merci pour la réponse.
    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public function ajouterAction()
        {
            $this->view->action = 'ajouter';
            //$this->_helper->redirector('index', 'gererdisciplines');
     
            $form = new Application_Form_Discipline();
            $this->view->form = $form;
            $this->_redirect('/gererdisciplines/index');
    Mais il ne prend pas en compte le paramètre action = 'ajouter' et réaffiche le lien "Ajouter une discipline".

    EDIT
    J'ai progressé avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public function ajouterAction()
        {
            $this->view->action = 'ajouter';
            //$this->_helper->redirector('index', 'gererdisciplines');
     
            $form = new Application_Form_Discipline();
            $this->view->form = $form;
            //$this->_redirect('/gererdisciplines/index');
            $this->renderScript('/gererdisciplines/index.phtml');
    Cette fois il affiche le formulaire mais comme le tableau de données est initialisé dans l'action index, la vue n'arrive pas à le rendre :
    Warning: Invalid argument supplied for foreach() in /var/www/html/stagmas/application/views/scripts/gererdisciplines/index.phtml on line 17
    Il faut donc aller chercher le paquet de données aussi dans l'action ajouter.
    C'est moyen au niveau méthode de codage mais ça fonctionne.

    Merci.
    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. [WD17] ajouter/modifier dans table requête
    Par hadaf dans le forum WinDev
    Réponses: 10
    Dernier message: 29/05/2014, 20h55
  2. ouvrir un formulaire ajout event dans un calendar
    Par goldenman84 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/11/2010, 14h47
  3. Réponses: 2
    Dernier message: 24/02/2009, 15h20
  4. Formulaire ajout enregistrement dans MySQL
    Par dahu17 dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2008, 13h07
  5. [MySQL] problème formulaire ajouter entrées dans bdd
    Par _alex_ dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/12/2006, 20h08

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