Získání hodnoty z onSuccess v presenteru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- tomees
- Člen | 59
Zdravím, mám dotaz.
Vytvářím formuláře jako komponenty přes DI. Redirect po odeslání
formuláře provádím v presenteru (tak jak to je v sandboxu, víceméně).
Ale zajímá mě, jak ideálně získat např. id záznamu a následně na něho
moct přesměrovat právě v presenteru. Jak hodnotu, kterou mám v onSuccess
přímo v komponentě načíst v druhém onSuccess v presenteru?
Komponenta
class GeneratePrintFormFactory extends Nette\Object
{
/** @var PrintedCodesModel */
private $printedCodesModel;
//-------------------------- atd
public function __construct(PrintedCodesModel $printedCodesModel, CodeModel $codeModel, PrintModel $printModel, User $user)
{
$this->printedCodesModel = $printedCodesModel;
$this->codeModel = $codeModel;
//----------------------- atd
}
/**
* @return Form
*/
public function create()
{
$form = new Form;
$form->addText('count', 'Počet štítků')->setRequired();
//--------------------
$form->addSubmit('sub', 'Uložit');
$form->onSuccess[] = array($this, 'formSucceeded');
return $form;
}
public function formSucceeded(Form $form, $values)
{
$count = $values->count;
$customerId = $this->user->identity->customer;
$list = $this->printedCodesModel->add($customerId, $this->user->id, $values->print);
// vytvorim novy seznam, chtel bych na nej presmerovat
}
}
Přesměrování v presenteru
protected function createComponentGeneratePrintForm()
{
$form = $this->generatePrintFormFactory->create();
$form->onSuccess[] = function ($form, $this) {
// jak zajistit, abych zde mohl pracovat s ID vytvoreneho seznamu
// a mohl ho pouzit treba v redirectu?
$this->flashMessage('Bylo vygenerovano ' . $form->values->count . ' stitku', 'success');
$this->redirect('this');
};
return $form;
}
moc diky
- tomees
- Člen | 59
https://doc.nette.org/…s/form-reuse
je toto reseni stale best practise? Nebo je i nejake jine?
- iguana007
- Člen | 970
Mělo by snad fungovat toto:
public function formSucceeded(Form $form)
{
$values = $form->getValues();
$count = $values->count;
$customerId = $this->user->identity->customer;
$list = $this->printedCodesModel->add($customerId, $this->user->id, $values->print);
$this->getPresenter()->redirect('fooBar', $list);
}
Editoval iguana007 (20. 1. 2016 17:36)