addUpload() – kontrola přípony souboru

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

Ahoj,

potřeboval bych při uploadu souboru zkontrolovat také příponu, ve foru jsem to našel několikrát ve starých vláknech, ale vždy bez výstupu, nebo s řešením, které mi nefunguje viz:

$form->addUpload('csv_file', 'CSV soubor:')
                ->addRule(Form::MIME_TYPE, 'Zdrojový soubor musí být ve formátu CSV.',
										 'text/csv,application/csv,text/x-csv,text/plain')
                ->addRule(Form::PATTERN, 'Soubor musí být typu CSV', '\\.csv$')
                ->addRule(Form::FILLED, 'Zdrojový soubor musí být vybrán.');

končím na Call to undefined static method Nette\Forms\Controls\UploadControl::validatepattern()

Poradili byste mi prosím jak z toho ven? Děkuji

Editoval raketoplan2005 (30. 7. 2013 23:07)

flr
Člen | 6
+
0
-

Form::PATTERN lze použít jen u prvků který dědí od Nette\Forms\Controls\TextBase, což Nette\Forms\Controls\UploadControl není. Můžes si ale napsat vlastní validátor, stačí metodě addRule předat callback – funkci která rozhodne jestli to projde nebo ne.

Takhle to bude fungovat:

$form->addUpload('csv_file', 'CSV')
	->addRule(Form::FILLED, 'Zdrojový soubor musí být vybrán.')
	->addRule(Form::MIME_TYPE, 'Zdrojový soubor musí být ve formátu CSV.', 'text/csv,application/csv,text/x-csv,text/plain')
	->addRule(function ($item) {
		return Nette\Utils\Strings::endsWith(strtolower($item->value->name), '.csv');
	}, 'Soubor musí být typu CSV');

viz https://doc.nette.org/cs/forms#…

enumag
Člen | 2118
+
+2
-

Dva blbé dotazy:

  1. Proč to Nette neumí? Připadá mi to jako poměrně častý požadavek.
  2. Lze napsat i JS validátor?
raketoplan2005
Člen | 147
+
0
-

@flr: Děkuji!