PHP-CLI a presmerovani v presenteru
- Dangar
- Člen | 6
Pouzivam akci z presenteru pro import z databaze pres CLI. Tato akce pak na zaver presmeruje na jiny presenter a akci pres
<?php
$this->redirect('MujPresenter:NejakaAkce');
?>
Problem je, ze pri volani pres CLI se nejprve v poradku zavola prvni presenter a pak kdyz dojde na redirect tak to napise:
<h1>Redirect</h1>
<p><a href="http:///?action=NejakaAkce;presenter=MujPresenter">Please click here to continue</a>.</p>
Proto jsem se chtel zeptat, je vubec mozne pri volani pre CLI pouzivat redirect, nebo bych mel nejprve zavolat prvni presenter a pak znova pres CLI zavolat ten druhy presenter?
- Dangar
- Člen | 6
phx napsal(a):
Redirect = HTTP hlavicka pro presmerovani. Mozna zkus vyhodit ForwardException (jen odhad).
ForwardException jsem nenasel. V history.txt jsem nasel, ze to bylo zmeneno
na ForwardingResponse.
Tak jsem zkusil neco jako
<?php
$presenter = new PresenterRequest('MujPresenter', 'NejakaAkce', array());
$fr = new ForwardingResponse($presenter);
$fr->send();
?>
Ale asi to bude jinak :D, protoze k presmerovani vubec nedojde.
- Patrik Votoček
- Člen | 2221
$this->forward… myslím musíš provádět dříve něž v render
fázi…
btw ten tvůj nevím jak to popsat bych upravil (Latest Nette 2.0):
<?php
$presenter = new PresenterRequest('MujPresenter', 'NejakaAkce', array());
$this->sendResponse(new ForwardingResponse($presenter));
?>
- Dangar
- Člen | 6
Tak jsem s tim nijak nepokrocil :(
To opravdu nikdo jiny neresil podobnou vec? Jde mi jen o to, jak donutit aby doslo k presmerovani v pripade volani akce pres CLI.
Jestli se napr. musi nadefinovat nejaka extra routa pro CLI. Nebo jestli chtit aby doslo k presmerovani je v pripade CLI spatny napad (protoze napr. volat akce pres CLI jdou pouze v ramci jednoho presenteru, atd.) a mel bych spise vytvorit novou akci, ktera bude urcena pouze pro CLI volani a kde presmerovani nebude.
Predem diky za jakekoliv nasmerovani.
Editoval Dangar (19. 10. 2010 17:13)
- phx
- Člen | 651
Napada mne, ze by jsi mohl vytvori nejaky script, ktery nacte Nette a spol, ale NEspusti $application->run();
Dale bych vytvoril PresenterRequest a spustil, a dalsi a dalsi …
Tz: samotny presenter neurcuje co se bude vykonavat dal.
Neco jakoby toto: https://forum.nette.org/…tingresponse
- David Grudl
- Nette Core | 8139
S forward() nemuze byt vysledek stejny, delas asi nekde neco spatne. Kam vede ten redirect?
- Dangar
- Člen | 6
Mas pravdu, vysledek je tochu jiny. Namisto
<h1>Redirect</h1>
<p><a href="http:///?par1=300&action=NejakaAkce;presenter=MujPresenter">Please click here to continue</a>.</p>
je u forward vysledkem toto:
<h1>Redirect</h1>
<p><a href="http:///?presenter=MujPresenter">Please click here to continue</a>.</p>
Ale k presmerovani dal nedojde.
- David Grudl
- Nette Core | 8139
K přesměrování nedojde pochopitelně, v PHP-CLI nelze přesměrovávat, to dělá prohlížeč a ten jaksi v CLI není.
Otázkou je, proč dochází k přesměrování, co jej vyvolá a jak mu zabránit. A tohle je třeba zjistit.