objekt jako parametr redirect

- hajek-tadeas
 - Člen | 4
 
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.

- hajek-tadeas
 - Člen | 4
 
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
 
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
 
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