Předávání id při editačnim formuláři
- Dragonaut
- Člen | 33
Ahoj, na tohle téma už bylo napsáno mnoho, ale přesto bych potřeboval
poradit.
Mám následující kód, který do bodu kdy neodešlu formulář funguje
správně
class ProductPresenter extends SecurityPresenter
{
/** @var \Nette\Database\Context */
private $db;
private $row;
public function renderUpdate($id){
$this->row = $this->db->table('product')->get($id);
}
protected function createComponentUpdateForm()
{
//dopsat kontrolu jestli ID existuje
$form = (new \App\BackendModule\Classes\AddFormFactory)->create();
$form->setDefaults(array(
...
));
$form->onSuccess[] = array($this, 'updateFormSubmitted');
return $form;
}
Po odeslání formuláře se zavolá updateFormSubmitted, ale moje otázka je taková, že nevím jak do ní předat záznam nebo alespoň jeho id. Protože proměnná $this->row se už jeví prázdná a ani nastavení na persistenci nepomohlo, což by ale stejně asi nebylo správné řešení.
public function updateFormSubmitted(\Nette\Application\UI\Form $form){
// poslání aktualizace do DB
$this->flashMessage('Produkt aktualizován.');
$this->redirect(':Backend:Product:default');
}
}
zkoušel jsem například upravit volání onSuccess[] v komponentě na
$form->onSuccess[] = function($form) use($this->row) {
updateFormSubmitted($form, $this->row);
}
return $form;
upravil jsem také vstupní parametry metody updateFormSubmitted, ale padá mi to na chybové hlášce
Cannot use $this as lexical variable
tak jsem to přepsal na
$row = $this->row;
$form->onSuccess[] = function($form) use($row) {
updateFormSubmitted($form, $row);
}
return $form;
a padá mi to zas na jiné chybě
syntax error, unexpected 'return' (T_RETURN)
Tak se chci zeptat na 2 otázky.
- Je můj přístup správný ?
- Jak získám záznam z db (nebo parametr id) v updateFormSubmitted ?
Díky
Editoval Dragonaut (23. 9. 2014 12:41)
- David Matějka
- Moderator | 6445
Zpracovani formulare se provadi pred render metodou, takze prepis renderUpdate na actionUpdate a pujde to.
K id se kdekoliv v presenteru muzes dostat pomoci
$this->getParameter('id')
syntax error, unexpected ‚return‘ (T_RETURN)
chybi ti strednik za anon fci