objekt jako parametr redirect

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

Snažím se o vytvoření náhledu obsahu formuláře, který si uživatel může zobrazit před odesláním. Vytvořil jsem AppForm, který má 3 tlačítka. save, view, a back. Formulář slouží pro vkládání článků na web(jedná se o turistické akce[jenom aby to nemátlo]). Mám vytvořenou třídu akce, která dědí od DibiRow.
Tohle je ServisPresenter.php

<?php
public function processAkceForm(\Nette\Application\AppForm $form) {
         if($form['save']->isSubmittedBy() || $form['view']->isSubmittedBy()) {

             $values = $form->getValues();  // pole výsledků z formuláře
             $akce = new \Akce(array());    // objekt třídy Akce (dědí dibiRow)

             $akce->datumOd  = $values['datumOd'];
             $akce->nazev    = $values['nazev'];
             $akce->podNazev = $values['podNazev'];
             $akce->popis    = $values['popis'];
             $akce->vedouci  = $values['vedouci'];
             $akce->obrazek  = $values['obrazek'];
             $akce->publikuj = $values['publikuj'];
             $akce->datumDo  = ($values['datumDo']=="")? NULL : $values['datumDo'];
             $akce->insertBy    =  Environment::getUser()->getIdentity()->getId();
             $akce->insertWhen  =  new \DateTime;

             if($form['save']->isSubmittedBy()) {
                 $this->flashMessage('Akce byla vložena.');
                 $this->model->createAkce($akce);
             }
             if($form['view']->isSubmittedBy()) {
                 $this->redirect('Servis:nahledAkce',array("akce" => $akce));// tohle je můj problém
             }
             $this->redirect('Servis:akce');
         }
    }
 public function actionNahledAkce(\Akce $akce) {
        $this->template->akce = $akce;
    }
?>

Problem je, že nejprve jde hláška „Object of class Akce could not be converted to string“, tato chyba se objeví ve třídě Presenter a je okomentovaná jako ‚value transmit is unnecessary‘ //nemám tucha co to vlastně nělá.
Po eliminaci tohoto kousku kodu se objeví chyba ‚Argument 1 passed to BackModule\ServisPresenter::actionNahledAkce() must be an instance of Akce, array given‘

Budu Vám vděčný za každou radu, nebo návrh jak se to dá obejít.

redhead
Člen | 1313
+
0
-

Nemůžeš přece přenášet v URL celý objekt, parametry by měli být jednoduché typy (int, string, atd)

hajek-tadeas
Člen | 4
+
0
-

redhead napsal(a):

Nemůžeš přece přenášet v URL celý objekt, parametry by měli být jednoduché typy (int, string, atd)

:) Dobře. Jsem tak trochu začátečník. Jak by se tedy tato věc s tim náhledem dala vřešit jinak? … už nad tim sedim docela dlouho a nemůžu nic vymyslet

redhead
Člen | 1313
+
0
-

Já bych to řešil tak, že bych to neredirectoval, ale zobrazil náhled v té action jako máš ten formulář. Nehledě na to že po redirectu se ti data z formuláře ztratí a uživatel je nebude moct (po náhledu) odeslat/uložit.

Takže si ten object Akce dej do nějaké třídní proměnné a v render<View>() metodě si to předej šabloně a vykresli. Samozřejmě pokud uživatel na stránku přijde poprvé, tak nic do šablony dávat nebudeš (a tam si to také obstaráš – zda-li informace máš zobrazíš je, když ne, nezobrazíš) a nakonec vyrenderuješ ten formulář (buď bude nový a nebo vyplněný tím, co uživatel zadal pro náhled).

hajek-tadeas
Člen | 4
+
0
-

redhead napsal(a):

Já bych to řešil tak, že bych to neredirectoval, ale zobrazil náhled v té action jako máš ten formulář. Nehledě na to že po redirectu se ti data z formuláře ztratí a uživatel je nebude moct (po náhledu) odeslat/uložit.

Takže si ten object Akce dej do nějaké třídní proměnné a v render<View>() metodě si to předej šabloně a vykresli. Samozřejmě pokud uživatel na stránku přijde poprvé, tak nic do šablony dávat nebudeš (a tam si to také obstaráš – zda-li informace máš zobrazíš je, když ne, nezobrazíš) a nakonec vyrenderuješ ten formulář (buď bude nový a nebo vyplněný tím, co uživatel zadal pro náhled).

Děkuji uctivě :D