AppFile FormControl ako rozsirenie FileUpload

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

Zdar vsetci.

Dokoncujem prave prvu funkcnu verziu rozsirenia AppFile pre Forms.

Zakladny popis:

  • rozsiruje FileUpload
  • udrzi informaciu o subore (uz nahratom) pri napr. editovani zaznamu
  • cez povodny file input ponuka moznost nahradit ho novym
  • pomocou checkboxu a jeho uncheckom umozni odoslat po submite stav, ze subor chceme zmazat
  • caption pre checkbox je link, teda moznost dalsej funkcionality, priamo download ulozeneho suboru, alebo nahlad na obrazok (lightbox)

Obrazok je viac, ako tisic slov, tu je sshot.

S cim by som potreboval poradit:

  1. je zaujem o tento Control a jeho zverejnenie na github-e, pripadne v Extras ?
  2. Namespaces pouzivam rovnake, ako v Nette, teda control je v Nette\Forms a UploadedFile je v Nette\Web, je toto vhodne alebo je lepsie pouzit ine namespaces ?
  3. nazov controlu AppFile je najlepsie co som vymyslel, ale mohlo by to byt lepsie, nenapada vas nic ?
voda
Člen | 561
+
0
-

Mám něco podobného, akorát místo odkazu na soubor tam mám selectbox s výběrem nahraných souborů. Na checkboxu je pak ‚toggle‘, který skrývá a zobrazuje selectbox a fileinput. Metoda getValue() vrací buď hodnotu ze selectboxu nebo instanci HttpUploadedFile.

1. je zaujem o tento Control a jeho zverejnenie na github-e, pripadne v Extras ?

Kdyby tvůj addon uměl i výběr ze selectboxu, tak bych ho určitě využil.

2. Namespaces pouzivam rovnake, ako v Nette, teda control je v Nette\Forms a UploadedFile je v Nette\Web, je toto vhodne alebo je lepsie pouzit ine namespaces ?

Namespace Nette určitě ne. Použit nějaký vlastní.

3. nazov controlu AppFile je najlepsie co som vymyslel, ale mohlo by to byt lepsie, nenapada vas nic ?

Já ten svůj nazval FileEdit.

edke
Člen | 198
+
0
-

voda wrote:

Mám něco podobného, akorát místo odkazu na soubor tam mám selectbox s výběrem nahraných souborů. Na checkboxu je pak ‚toggle‘, který skrývá a zobrazuje selectbox a fileinput. Metoda getValue() vrací buď hodnotu ze selectboxu nebo instanci HttpUploadedFile.

Aha. No ja teraz riesim situaciu, ze dana hodnota moze byt len jeden subor, nie viacero.

Ako hodnota je:

  • objekt HTTPUploadedFile, ak nahras novy subor
  • objekt UploadedFile ako extend HTTPUploadedFile, ak je hodnota uz nahraty subor a name je jeho nazov aj s jeho webovou Uri (napriklad /media/images/image.png), size je realna velkost, type je realny mime type a tmpname je full path (napriklad /var/www/example/document_root/media/images/image.png)

Ak zobrazujem formular a subor je uz uploadnuty, naplnam ho tym, co mam v db, teda „/media/images/image.png“, vytvori sa z toho objekt UploadedFile.

Momentalne to mam napojene na doctrine entity, a pomocou baseEntity sa automaticky deju vsetky potrebne operacie (new → move(), remove → unlink(), replace → unlink() and move()). Dalsia konfiguracia cez doctrine2 entities annotations, napriklad:

/**
 * @file(path="/media/people/photo")
 * @column(type="string", length=150, nullable=true)
 */
private $photo;
edke
Člen | 198
+
0
-

Ukazka definicie controlu a validacie:

$form->addAppFile('photo', 'Photo')
                ->setOption('description', 'image (JPG or PNG) with dimmensions 250x237px')
                ->addRule(Form::FILLED, 'Fotka je povinná')
                ->addRule(Form::MIME_TYPE, 'Podporovaný je len obrázok typu PNG alebo JPG', array('image/jpeg', 'image/png'))
                ->addRule(AppFile::IMAGE_WIDTH, "Fotka musí mať šírku %spx.", 250)
                ->addRule(AppFile::IMAGE_HEIGHT, "Fotka musí mať šírku %spx.", 237);

$form->addAppFile('curriculumVitae', 'CV file')
                ->setOption('description', 'PDF file with max. length 50kB')
                ->addRule(Form::FILLED, 'CV je povinné')
                ->addRule(Form::MIME_TYPE, 'Podporovaný je len PDF súbor', 'application/pdf')
                ->addRule(Form::MAX_FILE_SIZE, 'Maximálna povolená veľkosť je 50kB', 50*1024);


--/
voda
Člen | 561
+
0
-

edke napsal(a):

voda wrote:

Mám něco podobného, akorát místo odkazu na soubor tam mám selectbox s výběrem nahraných souborů. Na checkboxu je pak ‚toggle‘, který skrývá a zobrazuje selectbox a fileinput. Metoda getValue() vrací buď hodnotu ze selectboxu nebo instanci HttpUploadedFile.

Aha. No ja teraz riesim situaciu, ze dana hodnota moze byt len jeden subor, nie viacero.

Já to mám taky jako jednu hodnotu, ale můžu zvolit jakýkoliv dříve nahraný soubor.

edke
Člen | 198
+
0
-

voda wrote:
Já to mám taky jako jednu hodnotu, ale můžu zvolit jakýkoliv dříve nahraný soubor.

Tak teraz uz nerozumiem :)

bojovyletoun
Člen | 667
+
0
-

Že nahraješ soubor, třeba neprojde validací (custom validace na servevru) nebo se ti nebude líbit, tak nahraješ nový. Je to tak? A jde nějak ten uploadnutý soubor třeba zobrazit vedle (třeba situace nahrání fotky na profil)?

Nenapadlo mě využití možnosti vybrat dříve nahraný soubor (resp ano, ale není to tak časté).

edke
Člen | 198
+
0
-

bojovyletoun wrote:

Že nahraješ soubor, třeba neprojde validací (custom validace na servevru) nebo se ti nebude líbit, tak nahraješ nový. Je to tak? A jde nějak ten uploadnutý soubor třeba zobrazit vedle (třeba situace nahrání fotky na profil)?

Nenapadlo mě využití možnosti vybrat dříve nahraný soubor (resp ano, ale není to tak časté).

to bolo zrejme pre vodu, tak ? :)

voda
Člen | 561
+
0
-

bojovyletoun napsal(a):

Že nahraješ soubor, třeba neprojde validací (custom validace na servevru) nebo se ti nebude líbit, tak nahraješ nový. Je to tak?

Hodí se pokud ho chci změnit, třeba nahrát novější verzi souboru.

A jde nějak ten uploadnutý soubor třeba zobrazit vedle (třeba situace nahrání fotky na profil)?

To jsem zatím neřešil, ale bylo by to hezký.

Nenapadlo mě využití možnosti vybrat dříve nahraný soubor (resp ano, ale není to tak časté).

Nelibí se mi, kdybych chtěl mít na dvou místech stejný soubor, tak abych ho musel nahrávat dvakrát.