PHP-CLI a presmerovani v presenteru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Dangar
Člen | 6
+
0
-

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?

phx
Člen | 651
+
0
-

Redirect = HTTP hlavicka pro presmerovani. Mozna zkus vyhodit ForwardException (jen odhad).

jtousek
Člen | 951
+
0
-

Zkus tohle

<?php
$this->forward(‚MujPresenter:NejakaAkce‘);

Dangar
Člen | 6
+
0
-

jtousek napsal(a):

Zkus tohle

<?php
$this->forward(‚MujPresenter:NejakaAkce‘);

S forward je vysledek stejny :(

Dangar
Člen | 6
+
0
-

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
+
0
-

$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
+
0
-

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
+
0
-

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
+
0
-

S forward() nemuze byt vysledek stejny, delas asi nekde neco spatne. Kam vede ten redirect?

Dangar
Člen | 6
+
0
-

Mas pravdu, vysledek je tochu jiny. Namisto

<h1>Redirect</h1>

<p><a href="http:///?par1=300&amp;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.

pekelnik
Člen | 462
+
0
-

Heh? Výsledkem forwardu (vnitřního přesměrování) nemůže být přece vnější přesměrování – od toho je to forward – ne?

David Grudl
Nette Core | 8139
+
0
-

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.