Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-05-2008 11:03:24

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

[Résolu][1.5.1] Redirection en gardant le même url ?

Bonjour à tous !

Je souhaiterais, lors de détection d'une erreur bloquante, rediriger vers une page d'erreur. Cependant, je voudrais que l'url de la page ayant généré l'erreur soit conservée dans la barre d'adresses.
J'ai donc naturellement pensé au _forward(). Cependant, le traitement de la page continue alors que je voudrais le stopper.

J'explique :

- récupération d'un parametre, et controles.
- si le paramètre ne convient pas, je redirige sur la page d'erreur, mais en conservant l'url de la vraie page
- j'arrête le traitement de la vraie page (car le fameux paramètre va générer des erreurs lors de ce traitement)

j'ai donc fait tout simplement :

Code:

if (mes tests sur le param)
{
    $this->_forward('page_erreur');
    exit();
}

Lorsque je teste ce code, je n'obtiens pas ce que je veux : j'ai une page blanche sad. Si je retire le exit, ma redirection est faite correctement, avec l'url conservée, mais par contre j'ai l'affichage de toutes les erreurs de traitement de la page précédente. C'est pour ça que j'ai dit plus haut que le traitement continue...
Aucun intérêt de rediriger sur une page d'erreur si on récupère quand même des messages d'erreur sad

Si j'utilise _redirect(), je suis bien redirigé sur la page que je veux (et sans message d'erreur), mais l'url en barre d'adresse est celle de la page d'erreur, et non celle de la page à l'origine de la redirection.

A l'aide sad

Dernière modification par Bast (14-05-2008 15:25:25)

Hors ligne

 

#2 14-05-2008 11:14:47

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

Hello,

Pourquoi faire un forward() ?

Code:

// Controller
if (montest) {
    // traitement qui génère des erreurs
    // ....
} else {
    $this->view->message = "Le paramètre fourni n'est pas conforme";
}

// View
if (isset($this->message) {
    echo $this->message;
} else {
    // traitement qui génère des erreurs
    // ....
}

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 14-05-2008 12:17:09

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

Parce que le site sur lequel je travaille possède une page type à afficher.
C'est donc une contrainte pour moi; je ne peux pas simplement afficher un message dans la vue. Je dois bel et bien remplacer ma vue par la page d'erreur (une autre vue en l'occurrence).

Hors ligne

 

#4 14-05-2008 14:43:19

zelig
Nouveau membre
Date d'inscription: 08-05-2008
Messages: 4

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

salut,
je sais pas si ça va t'aider, c'est un peut bête, mais est ce que tu ne peut pas mettre un die() après le forward? pour arreter le traitement? d'ailleurs ça fait partie des consignes de sécurité, apres un redirect, on met un die(), comme ça les useragents qui ne supporte pas de redirect, il n'ont quand même pas accès aux messages d'erreur, ainsi que les traitements qui suivent!

Merci d'envoyer un feed-back, pour savoir.

Dernière modification par zelig (14-05-2008 14:43:47)

Hors ligne

 

#5 14-05-2008 14:55:24

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

Même effet que le exit() ; j'obtiens une page blanche.

Personne n'a déjà été confronté à ce genre de problème ? C'est curieux !


Edit : il y a bien une solution visuellement satisfaisante dans le bootstrap :

Code:

ini_set('display_errors', 0);

Mais dans les faits, je ne fais que cacher le problème. Ces erreurs ne devraient même pas exister !

Dernière modification par Bast (14-05-2008 14:58:27)

Hors ligne

 

#6 14-05-2008 15:24:39

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

Solution trouvée par pur hasard en faisant une recherche sur autre chose.

Code:

if (mes tests sur le param)
{
    return $this->_forward('page_erreur');
    exit();
}

Il suffisait du "return" devant -_-.
J'ai lu ça dans le Zend_Form Quick Start, mais j'aurait tout autant pu tomber dessus ailleurs...

Encore merci pour votre aide, même si cette fois, je vous ai battus ! big_smile

Hors ligne

 

#7 14-05-2008 21:15:38

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

Hello,

Le exit() ou le die() n'est pas une bonne façon de faire surtout avec le ZF. Dans ton cas tu empêches les plugins de tourner en postDispatch() ou dispatchLoopShutdown() (type Zend_Layout ou ErrorHandler).

Ce code devrait fonctionner normalement :

Code:

public function monAction()
{
    if (mestestsquipassent) {
        // mes traitements qui génèrent des erreurs
    } else {
        $this->_forward('page_erreur');
        // et surtout désactiver l'autorendu de la vue actuelle
        $this->_helper->viewRenderer->setNoRender();
    }
}

Le QuickStart Zend_Form ne parle surtout pas de l'exit().

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#8 15-05-2008 00:21:51

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

Effectivement, pas d'exit dans le guide. Mais pas de setNoRender() non plus hmm

un "return $this->_forward('page_erreur');" fonctionne très bien chez moi (même sans exit(), et sans setNoRender() ).
C'est une mauvaise utilisation ?

Dernière modification par Bast (15-05-2008 00:23:03)

Hors ligne

 

#9 15-05-2008 01:36:06

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu][1.5.1] Redirection en gardant le même url ?

Hello,

Non le return est bien la solution. Simplement j'ai déjà eu un problème avec l'autorendu mais les conditions devaient être différentes (et je ne m'en souviens plus sad).

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages