Tlačítko cancel pro formuláře

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

Zasekla jsem se na odeslaní formuláře se dvěma tlačítky save a cancel

protected function createComponentAddForm() {
        $form = new UI\Form;
        //$model = new CategoryModel();
        $form->addText('name', 'Název služby:')
                ->setRequired( 'Název služby.');
        $form->addText('url','URL webu:')
                ->setRequired('URL webu:');
        $form->addText('email', 'Email:', 35)
                ->setEmptyValue('@')
                ->setRequired() // conditional rule: if is email filled, ...
                ->addRule(UI\Form::EMAIL, 'E-mail není správně zadán'); // ... then check email
        $form->addTextArea('description', 'Popis služby:',35,10)
              ->setRequired('Popis služby');
        $form->addTextArea('adress', 'Adresa:',35,10)
              ->setRequired('Adresa');
        $form->addText('phone','Telefon:')
               ->setRequired('Telefon');
        $form->addPassword('password', 'Heslo:')
                ->setRequired('Prosím zadajte heslo.');
        $form->addPassword('password2', 'Heslo znovu:')
                ->addConditionOn($form["password"], UI\Form::FILLED)
                ->addRule(UI\Form::EQUAL, "Hesla se musí shodovat !", $form["password"]);
        $form->addSubmit('save', 'Save')
			->setAttribute('class', 'default')
			->onClick[] = $this->addSubmitted($form);

		$form->addSubmit('cancel', 'Cancel')
			->onClick[] = $this->formCancelled;

        $form->addProtection('Please submit this form again (security token has expired).');
        return $form;
    }

    public function addSubmitted($form) {
        dump($form->values);
        if ($form['save']->isSubmittedBy()) {
            $id = (int) $this->getParam('id');
            if ($id > 0) {

                $service->update($id, $form->getValues());
                $this->flashMessage('The album has been updated.');
            } else {
                $values = $form->getValues();
                $values['password']=sha1($values['password']);
                $values['seo']=String::webalize($values['name']);
                unset($values['password2']);
                $values['date'] = new DateTime;
                $LinksRepository->insert($values);
                $this->flashMessage('Služba byla přidána.');
            }

        }

        $this->redirect('default');
    }


    public function formCancelled()
    {
        $this->redirect('default');
    }

Laděnka mi vyhodí chybu: Form is not anchored and therefore can not determine whether it was submitted.

na řádku

if ($form['save']->isSubmittedBy()) {
David Matějka
Moderator | 6445
+
0
-

problem je

->onClick[] = $this->addSubmitted($form);

coz ti tu metodu zavola, kdyz to chces jako callback, tak jen

->onClick[] = $this->addSubmitted;

ale spis nez na event onClick u buttonu bych to navazal na onSuccess u formu

mardon
Člen | 59
+
0
-

pokud to opravím na

->onClick[] = $this->addSubmitted;

tak zase pro změnu na stejném řádku dostanu hlášení

Cannot use object of type Nette\Forms\Controls\SubmitButton as array

David Matějka
Moderator | 6445
+
0
-

jo, to mi nedoslo. nejlepsi bude, jak rikam, pouzit spis

$form->onSuccess[] = $this->addSubmitted;

ale pokud to opravdu chces nechat na tom callbacku onSubmit, tak se do te metody jako parametr neposila Form, ale prave SubmitButton, takze uprav addSubmitted na

public function addSubmitted($button) {
$form = $button->getForm();

ale lepsi bude ten onSuccess callback :)

mardon
Člen | 59
+
0
-

matej21 napsal(a):

jo, to mi nedoslo. nejlepsi bude, jak rikam, pouzit spis

$form->onSuccess[] = $this->addSubmitted;

ale pokud to opravdu chces nechat na tom callbacku onSubmit, tak se do te metody jako parametr neposila Form, ale prave SubmitButton, takze uprav addSubmitted na

public function addSubmitted($button) {
$form = $button->getForm();

ale lepsi bude ten onSuccess callback :)

sice nechápu kde se tam vzal ten button , ale nyní již funguje dle představ

David Matějka
Moderator | 6445
+
0
-

to $button predava nette, o udalostech si muzes precist tady
volani $this->addSubmitted je jen zkratka pro callback($this, 'addSubmitted')