Nevola se callback u formulare
- mixi.cz
- Člen | 5
Zdravim,
snazim se udelat jednoduchou galerii, ale stale se mi nedari zprovoznit formular
pro upravu popisu obrazku, ale stale se mi nepodarilo, aby mi po odeslani
formulare zavolal callback. Formular vytvarim v presenteru pro konkretni
editovany obrazek (vzdy pouze jeden formular na strance), ktery se bude
natahovat ajaxove. Zkousel jsem pouzivat jak Nette\Application\UI\Form tak
i Nette\Forms\Form, ale vysledek je stejny, callback se nezavola. Zkousel jsem
i pouzit onSubmit misto onSuccess.
Delam neco principielne spatne? Jak bych na takovou ulohu mel z pohledu Nette jit?
Pouziti vypada nejak takto (tridu jsem orezal o nadbytecny (funkcni) balast):
<?php
class GalleryPresenter extends BasePresenter
{
private $model;
private $edit = array();
public function editImageForm(GIImage $image)
{
// $form = new Nette\Application\UI\Form;
$form = new Nette\Forms\Form;
$form->addHidden('id');
$form->addText('description', 'Popis:');
$form->addCheckbox('show', 'Zobrazit');
$form->addSubmit('submit', 'Uložit');
$form->onSuccess[] = callback($this, 'editImageFormSubmitted');
$form->setDefaults(array(
'id' => $image->id(),
'description' => $image->name(),
'show' => $image->visible()
));
return $form;
}
function editImageFormSubmitted($form)
{
Debug::dump($form);
$values = $form->getValues();
$this->model->editImage($values['id'], $values['description'], $values['show']);
$this->model->saveImages();
$this->flashMessage('Úpravy byly uloženy.');
$this->edit[$values['id']] = FALSE;
die();
if (!$this->isAjax())
$this->redirect('this');
}
}
?>
Nette 2.0-beta (2011–07–02), PHP 5.3.6
Diky za pomoc.
- Claudie1
- Člen | 21
Ahoj.
u téhle verze Nette bys měl použít Nette\Application\UI\Form a onSuccess.
formulář bys měl vytvářet jako componentu pomocí metody createcomponent
(createcomponentImageForm napriklad) -viz dokumentace https://doc.nette.org/cs/forms#… .
- mixi.cz
- Člen | 5
Claudie1 napsal(a):
Ahoj.
u téhle verze Nette bys měl použít Nette\Application\UI\Form a onSuccess. formulář bys měl vytvářet jako componentu pomocí metody createcomponent (createcomponentImageForm napriklad) -viz dokumentace https://doc.nette.org/cs/forms#… .
Podle tohoto prikladu jsem to puvodne chtel implementovat, ale narazil jsem na problem, jak predat metode createComponentImageForm ID obrazku pro ktery se ma formular vytvaret. Zkusim se asi ponorit hloubeji do tvorby komponent a najit nejakou cestu.
Mixi
- Majkl578
- Moderator | 1364
mixi.cz napsal(a):
Podle tohoto prikladu jsem to puvodne chtel implementovat, ale narazil jsem na problem, jak predat metode createComponentImageForm ID obrazku pro ktery se ma formular vytvaret. Zkusim se asi ponorit hloubeji do tvorby komponent a najit nejakou cestu.
A kde to ID bereš? Proč nepoužiješ property presenteru? Nebo getParam
($this->getParam('id')
)?
- mixi.cz
- Člen | 5
Majkl578 napsal(a):
mixi.cz napsal(a):
Podle tohoto prikladu jsem to puvodne chtel implementovat, ale narazil jsem na problem, jak predat metode createComponentImageForm ID obrazku pro ktery se ma formular vytvaret. Zkusim se asi ponorit hloubeji do tvorby komponent a najit nejakou cestu.
A kde to ID bereš? Proč nepoužiješ property presenteru? Nebo getParam (
$this->getParam('id')
)?
ID se vola ze sablony, nejak takto:
{foreach $image as $item}
.... (nahled obrazku)
{snippet $item->id()}
{if $edit[$item->id()]}
{$presenter->editImageForm($item)}
{else}
.... (informace o obrazku + signal pro zobrazeni formulare)
{/if}
{/snippet}
{/foreach}
Princip je, ze mam nahled galerie s obrazky a po kliknuti na popisek obrazku se misto popisku zobrazi formular pro upravu popisku. Takze ID neni ani v presenteru ani nikde v hlavickach, pouze v danem ajaxovem requestu. Presenter sice ma pole $edit, ale to mu nepomuze, pokud bude vicero editovanych obrazku.
Editoval mixi.cz (3. 8. 2011 0:27)
- Claudie1
- Člen | 21
no, nepomoho by to id předat signálu jako parametr? volání signálu s více paramtery je například tady:
- mixi.cz
- Člen | 5
Claudie1 napsal(a):
no, nepomoho by to id předat signálu jako parametr? volání signálu s více paramtery je například tady:
No, to uz ted delam, jenom mam problem vytvorit v handleru toho signalu funkcni formular :o) – pokud ho budu vytvaret tovarnickou jako komponentu, tak mu neumim ten parametr ze signalu predat, pokud ho nevytvorim jako komponentu, tak mi z nej nefunguje callback.
Co jsem zatim vycetl, asi by slo vytvorit tovarnickou obecny formular a
konkretni hodnoty vyplnit az v metode render… Akorat pokud vim, timto
zpusobem nemuze na strance fungovat vice formularu soucasne, protoze formulare
musi byt odlisene pomoci $name
. Jenomze to je parametr volany
v konstruktoru, kdy jednak jeste neznam ID a druhak by se konstruoval pouze
jednou i v pripade vice formularu na strance.
Radeji tedy opustim svuj puvodni dotaz a misto toho shrnu zadani reseneho problemu – generovani N nezavislych formularu do stranky z presenteru, tak aby fungovala JS validace, mely spolecny callback a sel pouzit ajax. Jak to udelat „nette compliant way“?
Diky za postrceni spravnym smerem.