Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-08-2010 13:41:20

Danny
Nouveau membre
Date d'inscription: 27-08-2010
Messages: 3

Quickstart 1.10 : ajouter les fonctions d'édition et de suppression

Hello les gens, je débute avec ZF tongue

J'ai installé le Quickstart 1.10 pour jouer un peu avec et voir comment ça fonctionne, en essayant d'ajouter des fonctionnalités Delete, Edit etc.

Si ça peut intéresser des débutants qui passent par là, voilà mes modifs pour ajouter au Quickstart les fonctions de suppression et d'édition des entrées du guestbook :

- dans models/GuestbookMapper.php :

Code:

    public function delete($id)
    {
        $table = $this->getDbTable();
        $where = $table->getAdapter()->quoteInto('id = ?', $id);
        $table->delete($where);
    }

- dans views/scripts/guestbook/index.phtml :

Code:

Guestbook Entries: <br />
<dl>
    <?php foreach ($this->entries as $entry): ?>
    <dt><a href="<?php echo $this->url(
    array(
        'controller' => 'guestbook',
        'action'     => 'delete',
        'id'         => $entry->id,
    ),
    'default',
    true) ?>">[delete]</a>
    <a href="<?php echo $this->url(
    array(
        'controller' => 'guestbook',
        'action'     => 'edit',
        'id'         => $entry->id,
    ),
    'default',
    true) ?>">[edit]</a>
        <b><?php echo $this->escape($entry->email) ?></b></dt>
    <dd><?php echo $this->escape($entry->comment) ?></dd>
    <?php endforeach ?>
</dl>

- ajout de views/scripts/guestbook/edit.phtml :

Code:

Use the form below to edit the guestbook entry.

<?php
$this->form->setAction($this->url());
echo $this->form;
?>

- ajout de views/scripts/guestbook/delete.phtml :

Code:

<p><b>Entry #<?php echo $this->rowid ?> has been deleted.</b></p>
<p><a href="<?php echo $this->url(
    array(
        'controller' => 'guestbook',
        'action'     => 'index'
    ),
    'default',
    true) ?>">Back to the Guestbook</a>
</p>

- dans controllers/GuestbookController.php :

Code:

    public function deleteAction()
    {
        $request = $this->getRequest();
        $id = $request->getParam('id');
        if (isset($id)) {
            $mapper  = new Application_Model_GuestbookMapper();
            $mapper->delete($id);
        }
        else
        {
            return $this->_helper->redirector('index');
        }
        $this->view->rowid = $id;
    }
    
    public function editAction()
    {
        $request = $this->getRequest();

        $objGuestbook = new Application_Model_Guestbook();
        $mapper = new Application_Model_GuestbookMapper();
        $mapper->find($request->getParam('id'), $objGuestbook);

        if ($objGuestbook->getId() === NULL) return $this->_helper->redirector('index');

        $form = new Application_Form_Guestbook(array('guestbook' => serialize($objGuestbook)));
        
        if ($this->getRequest()->isPost()) {
            if ($form->isValid($request->getPost())) {
                $comment = new Application_Model_Guestbook($form->getValues());
                $comment->setId($request->getParam('id'));
                $mapper->save($comment);
                return $this->_helper->redirector('index');
            }
        }
        $this->view->form = $form;
    }

- et enfin le contenu de forms/Guestbook.php :

Code:

<?php

class Application_Form_Guestbook extends Zend_Form
{
    public function __construct($options = null)
    {
        parent::__construct($options);
        
        $objGuestbook = unserialize($options['guestbook']);
        
        // Set the method for the display form to POST
        $this->setMethod('post');

        // Add an email element
        $this->addElement('text', 'email', array(
            'label'      => 'Your email address:',
            'required'   => true,
            'value'         => $objGuestbook->email,
            'filters'    => array('StringTrim'),
            'validators' => array(
                'EmailAddress',
            )
        ));

        // Add the comment element
        $this->addElement('textarea', 'comment', array(
            'label'      => 'Please Comment:',
            'required'   => true,
            'value'         => $objGuestbook->comment,
            'validators' => array(
                array('validator' => 'StringLength', 'options' => array(0, 50))
                )
        ));

        // Add a captcha
        $this->addElement('captcha', 'captcha', array(
            'label'      => 'Please enter the 3 letters displayed below:',
            'required'   => true,
            'captcha'    => array(
                'captcha' => 'Figlet',
                'wordLen' => 3,
                'timeout' => 300
            )
        ));

        // Add the submit button
        $this->addElement('submit', 'submit', array(
            'ignore'   => true,
            'label'    => 'Sign da Guestbook baby',
        ));

        // And finally add some CSRF protection
        $this->addElement('hash', 'csrf', array(
            'ignore' => true,
        ));
        
    }
    
    public function init()
    {
    // walou
    }
}

Dans la classe Application_Form_Guestbook, j'ai déplacé le code de la méthode init dans le constructeur, pour pouvoir passer au formulaire les valeurs de l'enregistrement à éditer. C'est pas forcément prévu pour être fait comme ça, mais j'ai pas trouvé d'autre moyen pour l'instant.

Voilà, un bon début pour se faire la main smile

Dernière modification par Danny (27-08-2010 15:20:05)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages