Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
j'ai remarqué que si je fesais une redirection vers une autre action l'url ne change pas, y'a t'il un moen de remédier à ca?
Autrement dis: Si je fais $this->_forward("index","index"); je veux que ça s'affiche dans l'URL /index/index et non pas l'ancienne adresse. $this->_redirect() me sort une erreur de cannot send header, et d'après ce que j'ai lu, le pb vient d'une femeture de balise php ou d'un espace.
Donc je voulais savoir, qu'est ce que je dois fermer(controlleur, index.php.....) et qui ceux ne devront pa fermer une balise php.
Merci
Dernière modification par mohamed (25-06-2007 21:36:25)
Hors ligne
Bonjour,
Je ne ferme jamais les balises php, ça se fait tout seul, comme ça pas de problème de blanc ou autre après le code php.
Je crois que tu peux utiliser un action helper dont la doc est là :
http://framework.zend.com/manual/en/zen … ockhelpers
paragraphe : 7.8.4.2. Redirector
A+
fred
Hors ligne
Non, en fait je me suis dis que peut etre fallait que je définissait les routes comme le tutau de philippe
$router = new Zend_Controller_Router_Rewrite();
$cmtRoute = new Zend_Controller_Router_Route(
"comment/:action/:comment",
array( "comment"=>null,
"controller"=>"comment",
"action"=>"display"
)
);
$router->addRoute("comment",$cmtRoute);
$controller->setBaseUrl(BASE_URL);
$controller->setRouter($router);
Bein je l'ai jamais utlisé. Est ce que _redirect nécéssite ça. Je ne définie pas un router et pourtant ca fonctionne_route.
Est ce que c'est nécéssaire? si non, alors quel est son avantge?
Hors ligne
Bonjour,
Le problème du redirect ne vient pas forcément d'une fermeture de balise PHP ou d'un espace avant : tu as cette erreur quand tu as déjà envoyé du texte au navigateur avant de faire ton redirect.
Explicitons : quand php envoie une page, il commence par envoyer les headers HTTP (les cookies, le content-type, et diverses infos sur le serveur). Ensuite il commence à envoyer la page elle même (<html>....</html>).
un $this->_redirect est une redirection qui utilise les headers HTTP. Donc si tu as déjà envoyé du texte à ton navigateur, c'est trop tard, il ne peut plus faire son redirect.
Bref, il faut traquer dans ton code un echo qui traine ou effectivement un espace ou un saut de ligne avant ton <?php...
A+, Philippe
Hors ligne
Bon j'ai retrouvé le pb.
C'est que j'ai pas aimé le fait d'insérer le header et le footer dans mes vues, donc je l'ai insére dans mon fichier index.php et là il y'a un pb avec la redirection. Quelqu'un saurait comment remédier à ce problème, on ne va pas s'amuser à inclure une partie qui se répète tout le temps comme ca comme meme.
Hors ligne
Salut,
Oui, effectivement, j'ai remarqué ça, il y'a un problème dans ZendFramework, c'est un problème vaiment génant, mais voilà, personnellement pour remédier à ce problème j'utilise ob_start() et ob_end_flush();
Pour inclure du html dans ton index.php avec le lancement du framework, c'est comme si t'as fait un echo et là ça va générer une entête http et quand le framework sera lancé, il va de même essayer d'écrire dans le header avec ta fonction _redirect vue qu'elle utilise la fonction header("") de php.
Donc voilà ce que je te conseille:
<?php ob_start();?>
Code HTML, ou meme php avec echo, n'importe quoi loool
<?php
Le baratin du framework................................
ob_end_flush();?>
Hors ligne
Il y a une autre solution plus élégante, mais un peu plus compliquée. On peut sous classer Zend_View et modifier la fonction _run() ou la fonction render() pour insérer les headers et footers.
A+, Philippe
Hors ligne
Salut philippe,
C'est très bien ce forum, vu en plus que tu bossait avec le framework depuis ses début, moi je n'ai travailler qu'avec la version 0.2.0 et la 0.7.0.
Bon, moi je parlais des pbs dont parlait mohamed, les erreurs du style "Cannot send Header", avec le ob_start() et ob_end_flush().
Tu peux faire ce que tu veux, des echo, du code html n'importe où, tout ce que tu veux quoi sans se soucier du pbs du "Cannot send header".
Cordialement Verboz
Hors ligne
Salu merci verboz et philipe pour votre aide, c'est bon problème réglé avec ce que m'a dis verboz, mais je crois que ta solution philipe n'est pas aussi flexible, je veux modifier avec facilité le template et non pas en changeant le coeur du framework.
Hors ligne