použití addCondition u addUpload

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

Dobrý den,
snažím se docílit toho, aby nahrávaný soubor nebyl povinný, ale pokud je, tak aby respektoval nějaká pravidla.

Což bych zapsal jako

$form->addUpload('image', 'Logo:')
	->addCondition(NForm::FILLED)
        ->addRule(NForm::IMAGE, 'Logo musí být JPEG, PNG nebo GIF.')
        ->addRule(NForm::MAX_FILE_SIZE, 'Maximální velikost souboru je 2 MB.', 2048 * 1024 /* bytes */);

ale to není funkční – formulář s ještě vygeneruje, ale po odeslání jenom bílá stránka. Používám Nette 2 RC 1 5.2 s prefixy.

Děkuji

semi
Člen | 4
+
0
-

Zdravím,
nejsem žádný nette guru, tak neručím za 100% správnost. Používám verzi NetteFramework-2.0.3-PHP5.3 Myslím že konkrétně to, co potřebujete funguje i bez přidání oné Condition na vyplnění. Teoreticky stačí nechat tam jen pravidlo na maximální velikost a pak ve zpracování formuláře chytat vyjmky asi takto.

protected function createComponentUploadForm(){
    $form = new UI\Form();
    $form->addUpload('file', 'Soubor')
            ->addRule(UI\Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 20 MB.', 20 * 1024 * 1024 /* v bytech */);;
    $form->addSubmit('send', 'Nahraj');

    $form->onSuccess[] = callback($this, 'uploadFormSubmitted');
    return $form;
}

public function uploadFormSubmitted($form) {
    try {
      dump($form->getValues());

    }catch(NS\AuthenticationException $e) {
      $form->addError($e->getMessage());
    }
  }

Funguje to asi tak, že po vybrání velkého souboru a kliknutí „Nahraj“ se soubor začne nahrávat a v momentě když server zjistí, že soubor je větší než limit, utne to a hodí vyjmku a formulář promítne chybovou hlášku.