Personnaliser une 404 dans un plugin Symfony

Depuis maintenant plus de 6 mois, je suis revenu à mon métier initial : développeuse PHP. Ah, c’est moins prestigieux que d’autres postes dans une entreprise, mais j’aime l’aspect technique.
J’ai quelques mémento à placer sur le Net, car je pressens que le problème se reproduira un jour. J’hésitais à ouvrir un blog « technique », et je me suis dit que c’était plutôt ambitieux. Si jamais je voulais maintenir un certain intérêt, il me faudrait publier régulièrement sur ce nouveau blog technique.
Pour le moment, je mettrais donc mes mementos ici, et s’ils sont trop nombreux, j’aviserais.

On commence par un petit pense-bête ou snippet, sur comment personnaliser une page 404 dans un plugin Symfony.


try
{
$this->poll = $this->getRoute()->getObject();
} catch ( sfError404Exception $e )
{
$message = 'Sondage pas encore ouvert ou déjà fermé.';
$request->setParameter('msg', $message);
$this->forward('poll', 'error');
}

Tout ça, parce que dans mon routing.yml, j’ai utilisé une sfPropelRoute avec l’utilisation d’un modèle et d’une méthode spéciale pour le criteria :
polling_test:
url: /qcm/:id
class: sfPropelRoute
options: { model: Poll, type: object, method_for_criteria: selectAvailablePoll }
params: { module: poll, action: show }
requirements:
sf_method: [GET, POST]

et que l’erreur générée, par défaut est une sfError404Exception. Quand nous essayons d’accéder à un objet donc le critère ne correspond pas (il faut vérifier les paramètres de filtrage de la fameuse méthode spéciale pour le criteria).


public function executeError(sfWebRequest $request)
{
$this->message = $request->getParameter('msg');
}

2 réflexions sur “Personnaliser une 404 dans un plugin Symfony

  1. Hello Sarah,

    Autre solution possible. Tu récupères ton objet poll sans faire appel au Criteria et dans ta méthode d’action, il ne te reste plus qu’à faire cela :

    poll = $this->getRoute()->getObject();
    $this->forwardIf($this->poll->isActive(), ‘poll’, ‘notActive’);
    }

    Ou bien:

    Hello Sarah,

    Autre solution possible. Tu récupères ton objet poll sans faire appel au Criteria et dans ta méthode d’action, il ne te reste plus qu’à faire cela :

    poll = $this->getRoute()->getObject();

    if (!$this->poll->isActive())
    {
    return sfView::ERROR;
    }
    }

    Et il ne reste plus qu’à implémenter le template pollError.php🙂

    Hugo.

Ajouter mes idées

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s