THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

J'ai une boucle qui contient la buildModelCriteria(),
dans cette fonction, si je détecte une erreur, je voudrais le renvoyer vers une page "erreur du module" qui lui expliquerai le problème.

MyModule/error/1

Si je fais un

throw new \Exception('Err:Timeout... merci de recommencer !');

L'internaute une page d'erreur générique, sans explication.

Merci

Last edited by informatiqueprog (25-06-2015 12:56:49)

Offline


Pour ce faire, il te faut lever une RedirectException (namespace Thelia\Core\HttpKernel\Exception) , et non pas une Exception de base. Voici la signature du constructeur :

public function __construct($url, $statusCode = 302, $message = "", $code = 0, \Exception $previous = null)

L’exception est interceptée par le kernel, qui effectue une redirection vers $url, avec le HTTP status $statusCode.


OpenStudio Toulouse

Offline


Merci Roadster, mais je viens juste de voir ton message.

Je suis sur une piste juste à coté, j'ai crée une class

class ResaException extends \Exception" 

et un EventListeners

    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::EXCEPTION                     => ['handleException', 129],
        ];
    }

    public function handleException(GetResponseForExceptionEvent $event)
    {
        // \Thelia\Log\Tlog::getInstance()->notice('handleException');

        $exception = $event->getException();
        
        if ($exception instanceof MyModuleException) {
            // \Thelia\Log\Tlog::getInstance()->notice('MyModuleException');

            $event->setResponse(RedirectResponse::create(URL::getInstance()->absoluteUrl('/MyModule/error')));
        }
    }

Je n'ai pas terminé mes tests, mais pour l'instant cela semble marcher comme je souhaite

Last edited by informatiqueprog (25-06-2015 14:00:50)

Offline


RedirectException  fait exactement ce que tu demandes, sans que tu aie besoin d'écrire du code supplémentaire.

Mais c'est toi qui vois.


OpenStudio Toulouse

Offline


Effectivement c'est plus simple.

Par contre je ne vois pas bien comment récupérer mon "message"...
faut que je passe un "code erreur" dans l'URL je suppose ?

Offline


$message, c'est le message de l'exception.

Tu peux urlencoder ton message d'erreur, et le passer dans l'URL, pour le récupérer dans ton template. Comme il s'agit d'une redirection, tu n'a pas vraiment d'autres options.


OpenStudio Toulouse

Offline


J'ai abandonné mon beau petit code pour ta solution avec un code erreur dans l'URL...

marche parfaitement

merci