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 :


$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 :


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 :


// 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 empty() plutôt que de tester si la variable est false car current() renvoie null si le jeu d'enregistrement (rowset) ne comporte pas d'éléments.

Commentaires

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...

Ajouter un commentaire