Premazanie hodnôt formulára po odoslaní
- tino415
- Člen | 46
Nevie niekto poradiť ako premazať hodnoty formulára po jeho odoslaní ? Skúšal som nastaviť defaults v tovarničke aj v proces form aj v create form ale nič nezabralo.
A ešte mám jednu otázku, renderujem daný formulár dva krát, a keď ho odošlem, hodnoty sa nastavia v obidvhoch a tak isto majú obidva rovnaké id (toto som vyriešil tak že som v template každému inputu manualne prestavil id, ale ak existuje lepší spôsob, sem s ním)
<?php
namespace App\Suggester\Forms;
use Nette\Application\UI\Form;
use Nette\Application\UI\Control;
class CustomCategoryUpdateFormFactory extends Control
{
/**
* @var \App\Suggester\Models\Suggester_categoryRepository
*/
private $suggesterCategoryRepository;
/**
* @var \App\Suggester\Models\Suggester_typeRepository
*/
private $suggesterTypeRepository;
public function __construct(
\App\Suggester\Models\Suggester_categoryRepository $suggesterCategoryRepository,
\App\Suggester\Models\Suggester_typeRepository $suggesterTypeRepository
) {
parent::__construct();
$this->suggesterCategoryRepository = $suggesterCategoryRepository;
$this->suggesterTypeRepository = $suggesterTypeRepository;
}
public function create()
{
$form = new Form;
$form->addHidden('id', 'id')
->setDefaultValue("0");
$form->addText('name', 'name')
->setDefaultValue("")
->setRequired(TRUE);
$form->addSelect('type_id', 'type', $this->suggesterTypeRepository->all->fetchPairs('id', 'name'))
->setDefaultValue(1)
->setRequired(TRUE);
$form->addSubmit('submit', 'submit');
$form->onSuccess[] = $this->process;
return $form;
}
public function process(Form $form)
{
$values = $form->getValues();
$this->suggesterCategoryRepository->update($values);
$form->setDefaults(array(
'id' => "0",
'name' => '',
'type_id' => 1,
));
}
}
?>
- David Matějka
- Moderator | 6445
Po zpracovani formulare presmeruj. pouze pokud bys resil ajax pozadavek, tak
ty hodnoty nastav pomoci setValues()
.
renderujem daný formulár dva krát, a keď ho odošlem, hodnoty sa nastavia v obidvhoch
tady asi bude lepsi si udelat 2× createComponent v presenteru
- duke
- Člen | 650
Je dobrým zvykem po zpracování formuláře provést přesměrování. Krom toho, že to řeší problém s nechtěným opakovaným odesláním formuláře v prohlížeči, to řeší také tvůj problém s promazáním hodnot ve formuláři.
Pokud bys trval na nepřesměrovávání, tak musíš použít místo
setDefaults
metodu setValues
(setDefaults
ovlivňuje jen formuláře, které jsou buď neukotvené nebo neodeslané).
Co se ID týče, je při vytváření nového záznamu lepší nechat ho automaticky vygenerovat databází (AUTOINCREMENT nad primárním klíčem) a do formuláře ho přidávat jen v případě editace již existujícího záznamu.