Změna $request před storeRequest()

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

Zdravim

Resim problem jak pred ulozenim requestu pozměnit jeho obsah. Konkretne se mi jedna o jeden persistentni parametr. Bohuzel Request je zamrzlej a nemuzu do nej hrabat.

Zkousel jsem hledat i cestu jak jej upravit pri restoreRequest, ale taky ee:(

Posledni moznost je hrabnout do SESSION, ale to je prasarna.

Proc to resim? Mam jednu app kde jednu hodne s AJAXem. A resim problem, co kdyz bude uzivatel dlouho neaktivni a klikne na AJAX akci? Fajn ulozim request a presmeruji, prihlasi se, restornu a jedu. Ale v tu chvili je uzivatel na nejake jine strance (na takove kam by se mel dostavat jen AJAXem) coz dela kapku nelechu. Proto chci udelat aby kdyz k tomuto dojde aby se ajax deaktivoval do chvile nez se nejak vrati na vychozi stranku. K tomu ma slouzit ten persistentni parametr.

Patrik Votoček
Člen | 2221
+
0
-

asi ten Request budes muset „naklonovat“.

phx
Člen | 651
+
0
-

Jenze jak ho predam do storeRequest()?

kravčo
Člen | 721
+
0
-

phx napsal(a):

Jenze jak ho predam do storeRequest()?

Riešil som podobný problém, keď som tweakoval odoslanie formulára prihláseným používateľom po dlhej nečinnosti + nejaké veci s flash správami.

Ak si dobre pamätám vyzeralo to nejako takto:

MyApplication.php

class MyApplication extends Application
{
    public function storeRequest($request = '+ 10 minutes', $expiration = '+ 10 minutes')
    {
        // $request (PresenterRequest) is optional parameter
        //   to maintain compatibility with original function
        if (!$request instanceof PresenterRequest) {
            $expiration = $request;
            $requests = $this->getRequests();
            $request = end($requests);
        }

        // rest of the function is nearly same as original code
        $session = $this->getSession('Nette.Application/requests');
        do {
            $key = substr(md5(lcg_value()), 0, 4);
        } while (isset($session[$key]));

        $session[$key] = $request; // ... just here, we use parameter
        $session->setExpiration($expiration, $key);
        return $key;
    }

    // public function restoreRequest(...) stays the same

}

config.ini

; ...
service.Nette-Application-Application = MyApplication
; ...