Piquer des idées à Symfony

On parle beaucoup du framework PHP Symfony en ce moment à l'occasion du Symfony Live. Pour ne pas mourir idiot, j'ai commencé à jeter un coup d'œil à leur documentation.

J'y ai trouvé une petite méthode bien sympa :

<?php
$this
->forward404Unless($this->blog_post);
?>

Elle teste une variable pour vérifier qu'elle contient bien quelque chose. Si ce n'est pas le cas, elle redirige vers une page 404. C'est très utile lors d'opérations de type CRUD où on doit récupérer un enregistrement depuis la base à partir d'une clé primaire passée en paramètre de la requête.

J'ai donc écrit une petite aide d'action (action helper) qui fait de même pour le Zend Framework :

<?php
class Wiip_Controller_Action_Helper_Throw404IfEmpty 
    
extends Zend_Controller_Action_Helper_Abstract
{
    public function 
direct($value)
    {
        if (empty(
$value)) {
            throw new 
Zend_Controller_Action_Exception('Document non trouvé'404);
        } 
    }
}
?>

J'utilise l'astuce dont j'avais parlé dans un précédent article pour simuler une erreur 404.

Exemple d'utilisation dans une méthode de contrôleur :

<?php
// On récupère un billet de blog depuis la base de données
$blogPosts = new BlogPosts();
$posts $blogPosts->find($this->_getParam('id'));
$post $posts->count() ? $posts->current() : null;

// On teste la variable. Si à null, le billet n'existe pas et on redirige vers une page 404
$this->_helper->throw404IfEmpty($post); 
?>

Mise à jour du 17 juin - Il faut utiliser <?phpempty()?> plutôt que de tester si la variable est <?phpfalse?> car <?phpcurrent()?> renvoie null si le jeu d'enregistrement (rowset) ne comporte pas d'éléments.

Portrait de Damien

Ce "forward404Unless" est lui

Ce "forward404Unless" est lui même piqué du get_object_or_404 de Django.
http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#get-object-o...

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.