Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Hello les gens, je débute avec ZF
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 :
public function delete($id) { $table = $this->getDbTable(); $where = $table->getAdapter()->quoteInto('id = ?', $id); $table->delete($where); }
- dans views/scripts/guestbook/index.phtml :
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 :
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 :
<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 :
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 :
<?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
Dernière modification par Danny (27-08-2010 15:20:05)
Hors ligne
Pages: 1