Zpracování formuláře podmínka IF

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

Zdravím přátelé,

mám takový problém, ale nevím jak přes něj dál …

Mám jednoduchý formulář:

public function createComponentKontaktForm() {
        $form = new Form();
        $form->addText('jmeno', 'Jméno a přijmení')
                ->setAttribute('placeholder', 'Jméno a přijmení .....')
                ->setRequired('Pole je povinné!')
                ->setAttribute('class', 'form-control');
        $form->addText('pozice', 'Pozice')
                ->setAttribute('placeholder', 'Pozice .....')
                ->setAttribute('class', 'form-control');
        $form->addText('email', 'Email')
                ->setAttribute('placeholder', 'Email .....')
                ->setAttribute('class', 'form-control');
        $form->addText('tel', 'Telefon')
                ->setAttribute('placeholder', 'Telefon .....')
                ->setAttribute('class', 'form-control');
        $form->addUpload('img', 'Obrázek')
                ->addRule(Form::IMAGE, 'Soubor musí být obrázek - .jpg, .gif, .png')
                ->addRule(Form::MAX_FILE_SIZE, 'Soubor je příliš velký! Povolená velikost je 2M.', 2 * 1024 * 1024);
        $form->addSubmit('save', 'Vytvořit kontakt')
                ->getControlPrototype()
                ->class('btn btn-block btn-info');

        //  Zavola metodu kontaktFormSucceeded() na zpracovani formulare
        $form->onSuccess[] = $this->kontaktFormSucceeded;
        $form->setRenderer(new BootstrapRenderer);

        return $form;
    }

Zde je vše snad jasné ..

a zpracování formuláře:

public function kontaktFormSucceeded($form) {

       $values = $form->getValues();
       if($values->img->getName()) {
       dump($values);
       } else {
           dump($values);
       }

    }

Problém mám ovšem v tom, že když není img vyplněno, tak to prostě nic neudělá …

Respektivě, když vyberu soubor, zobrazí to dump, if se chová tak jak má, ale jakmile soubour nevyberu, provede se if, ale uz ne else … nic se nevypise …

Nenapadá Vás něco? Snad hodinu se snazim …

Nette 2.1.4

Děkuji

Michal Vyšinský
Člen | 608
+
+1
-

IMO když nevybereš soubor, tak ti neprojdou validační pravidla. Zkus dát před pravidla toho img inputu ještě

->addCondition(Form::FILLED)
wicked
Člen | 290
+
0
-

@MichalVyšinský

Já právě potřebuji aby to prošlo i když není prvek vyplněn :-)

Vem si úpravu user profilu, prostě upraviš třeba jen email, ale fotku novou už nahrávat nebudeš

Šaman
Člen | 2668
+
0
-

O to právě jde. AddCondition() se píše před validacní pravidla a definuje podmínku, kdy se pravidla uplatní (klasika – email musí být platný, jen pokud je vyplněný).

wicked
Člen | 290
+
0
-

No každopádně to funguje … Ale jsem z toho jelen, to řikám narovinu …

Michal Vyšinský
Člen | 608
+
0
-

Z čeho? Jestli potřebuješ něco vysvětlit je tu dokumentace a nebo se zeptej tady.

Šaman
Člen | 2668
+
0
-

AddRule() přidává validační pravidlo. Před něj se může napsat podmínka addCondition() a to pravidlo se pak použije jen pokud je podmínka splněná.

Příklad z dokumentace:

<?php
$form->addPassword('password', 'Heslo:')
    // pokud je heslo krátké
    ->addCondition(Form::MAX_LENGTH, 5)
        // pak bude muset obsahovat číslici
        ->addRule(Form::PATTERN, 'Musí obsahovat číslici', '.*[0-9].*');
?>

Editoval Šaman (10. 7. 2014 22:12)

wicked
Člen | 290
+
0
-

Ne v pohodě, už je mi to jasné, ale nenapadlo by mě to …