Nette formular uploadFile
- japlavaren
- Člen | 404
<?php
$form->addUpload('file')
->setRequired('select file')
->addRule($form::IMAGE, 'file must be image');
?>
Editoval japlavaren (31. 12. 2013 19:58)
- Takeshi
- Člen | 596
Oprava !!!
to ‚setRequired‘ mi funguje, len mi nezobrazuje alert() spravu … taktiez mi ju nezobrazuje pri podmienke Form::IMAGE … funguje mi len pri Form::MAX_FILE_SIZE
… P.S. Pouzivam rucne vykreslovanie formulara
<?php
{form registerForm}
{label name} - {input name}
{/form}
?>
Editoval Takeshi (31. 12. 2013 21:05)
- Takeshi
- Člen | 596
Aspon zatial som urobil nasledovne …
otazka: Ako zistit, ci je subor nahrany
<?php
{/form}
{if $form->isSubmitted()}
{if !$form->values['image']->size}
<script>
alert('Nahraj súbor');
</script>
{/if}
{/if}
?>
Este zistit, preco mi nefunguje alert() sprava pri
<?php
->addRule(Form::IMAGE,"Obrázok musí byť typu JPEG, PNG alebo GIF.")
?>
ale pri
<?php
->addRule(Form::MAX_FILE_SIZE,"Súbor musí mať veľkosť menšiu ako 8 MB.",8*1024*1024)
?>
mi to funguje
Editoval Takeshi (31. 12. 2013 22:09)
- Takeshi
- Člen | 596
Pravdepodobne idem na to zlozitejsie , ale pokial sa nevysvetli ta zahada … teda preci mi nefunguje
<?php
->addRule(Form::IMAGE,"Obrázok musí byť typu JPEG, PNG alebo GIF.")
?>
tak nemam inu moznost … zistit, ci subor je obrazok … nasiel som funkciu ->isImage()
<?php
{if $form->isSubmitted()}
{if !$form->values['image']->isImage()}
<script>alert("Daný súbor nie je obráyok");</script>
{/if}
{/if}
?>
Editoval Takeshi (31. 12. 2013 22:49)
- Takeshi
- Člen | 596
Viete teda niekto preco mi nefunguje horeuvedeny problem? (Nie vsetkym sa chce citat cela strana, tak tuto temu obnovim) …
Pri ‚rucnom‘ vykresleni formulara v sablone, mi pri nespravnom vyplneni formulara nezobrazuje alert() spravu pre nasledovne …
<?php
$form->addUpload("image","Fotka *")
->setRequired("Všetky polia musia byť vyplnené.") // nezobrazuje sa
->addRule(Form::IMAGE,"Obrázok musí byť typu JPEG, PNG alebo GIF.") //nezobrazuje sa
->addRule(Form::MAX_FILE_SIZE,"Súbor musí mať veľkosť menšiu ako 8 MB.",8*1024*1024); //zobrazuje sa
?>
- japlavaren
- Člen | 404
nette validacia ma 2 kroky:
- validuje sa na strane klienta (v prehliadaci) kde dokaze overit ci bol ten subor vybraty (setRequired). bohuzial ci sa jedna o obrazok, alebo aka je jeho realna velkost zistit nedokaze
- nasledne sa validuje znova vsetko na servery (ak by nikekto klientsku validaciu oklmal) a chyby sa vypisuju uzivatelovi
dobra rada – najprv si sprav funkcnost nad automaticky vykreslenou komponentou, potom ju renderuj sam. totiz ak ju renderujes sam, tak si musis vypisat errory sam (a vypisat aj hidden polia, vratane add protection hiddenu)
k tvojmu problemu – nevypisujes errory, fixni si to cca takto
{form registerForm}
<ul n:if="$form->hasErrors()" class="errors">
<li n:foreach="$form->errors as $error"><strong>{$error}</strong></li>
</ul>
{label name} - {input name}
{/form}
- Takeshi
- Člen | 596
japlavaren napsal(a):
nette validacia ma 2 kroky:
- validuje sa na strane klienta (v prehliadaci) kde dokaze overit ci bol ten subor vybraty (setRequired). bohuzial ci sa jedna o obrazok, alebo aka je jeho realna velkost zistit nedokaze
- nasledne sa validuje znova vsetko na servery (ak by nikekto klientsku validaciu oklmal) a chyby sa vypisuju uzivatelovi
dobra rada – najprv si sprav funkcnost nad automaticky vykreslenou komponentou, potom ju renderuj sam. totiz ak ju renderujes sam, tak si musis vypisat errory sam (a vypisat aj hidden polia, vratane add protection hiddenu)
k tvojmu problemu – nevypisujes errory, fixni si to cca takto
{form registerForm} <ul n:if="$form->hasErrors()" class="errors"> <li n:foreach="$form->errors as $error"><strong>{$error}</strong></li> </ul> {label name} - {input name} {/form}
Toto som uz skusal, akurat, ze som tam nemal ten vypis <strong>{$error}</strong> … noziadna zmena
- jiri.pudil
- Nette Blogger | 1032
@Takeshi: alertem zřejmě myslíš client-side validaci, kterou obstarává netteForms.js, že? Vypadá to, že je v tom skriptu chyba: hodnotu file inputu (v prohlížečích, které to podporují) totiž vrátí jako FileList, ale ve validátoru filled s tím už nepočítá. Pošlu pull request.
@japlavaren: hidden pole ručně vykreslovat nemusíš, Nette to i tak udělá za tebe
- Matey
- Člen | 142
ako je to s tým addUpload() momentálne?
snažím sa všemožne zabrániť odoslaniu formu bez vyplnenia uploadu ale nedarí sa mi
<?php
->addRule(Form::FILLED); // odošle
->setRequired(); // odošle
->addRule(Form::IMAGE); // odošle
?>
skúšal som rôzne kombinácie, prípadne aj addCondition ale nič nezabráni odoslaniu
používam 2.1.2
celé to momentálne vyzerá takto.. jednoduchý form len na obrázok
<?php
protected function createComponentCarouselAddForm()
{
$form = new Form;
$form->addUpload('image', 'Pridať obrázok:')
->setRequired('Vyber obrázok')
->addRule(Form::FILLED, 'Vyber obrázok')
->addRule(Form::IMAGE, 'Obrázok musí byť JPEG alebo PNG.');
$form->addSubmit('save', 'Uložiť');
$form->onSubmit[] = $this->carouselAddFormSucceeded;
return $form;
}
public function carouselAddFormSucceeded(Form $form)
{
\Nette\Diagnostics\Debugger::barDump($form->getValues()->image->error,'$form');
if ($form->getValues()->image->error !== 0) {
$form->addError('Vyber obrázok.');
$this->flashMessage('Vyber obrázok.');
$this->redirect('this');
}
$values = $form->getValues();
...
}
?>
toto je len taký test, addError to do formu neprída, nvm prečo, tak sa dostanem až ku flash a redirectu..
bez tohoto by som sa pri nevyplnenom uploade dostal sem
Method Nette\Http\FileUpload::__toString() must return a string value
edit: hm, vrátim sa k tomu o pár min neskôr a všetko ide ako má..? tak sorry, už je to bezpredmetné.. zle som premazal cache prehliadača, stále to v sebe malo starý netteForm.js :( taká blbosť
Editoval Matey (29. 3. 2014 12:02)