Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Form
Zend_Form Forum d'entraide pour le composant Zend_Form du Zend Framework (création de formulaires, helpers, AJAX etc.). Avant de poster -> FAQ Zend_Form.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/02/2011, 15h31   #1
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
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 :
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 :
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 :
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.
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 16h12   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
essaye avec un $this->_redirect('index') ou $this->render('index')
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 16h57   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Merci pour la réponse.
J'ai essayé ça :
Code :
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 :
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 :
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h22.


 
 
 
 
Partenaires

Hébergement Web