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