Premazanie hodnôt formulára po odoslaní

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tino415
Člen | 46
+
0
-

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
+
+1
-

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
+
+1
-

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.

tino415
Člen | 46
+
0
-

Jop, spracuvávam ich cez ajax, dík

akadlec
Člen | 1326
+
0
-

a invaliduješ snippet co obalí ten form? protože pokud jej nepřekreslíš tak se ti nemají jak resetovat políčka.