Upload suboru na server a ulozenie cesty do DB

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

Caute snazim sa dat dokopy upload subor na server na konretne miesto ale uz som dost zufaly… vocm je problem?
vypisuje chybu Cannot use object of type Nette\Forms\Controls\SubmitButton as array…

Formular:

<?php
protected function createComponentPolozkaForm($name) {
	   $hornina = $this->horninaRepository->findAll()->fetchPairs('id','nazov');




	    $form = new Form;
	    $form->addText('nazov', 'Nazov')->setRequired('Zvolte nazov');
	    $form->addText('popis', 'Popis')->setRequired('Zvolte popis');
	    $form->addSelect('idHornina','Hornina',$hornina);
	    $form ->addUpload('nazovSuboru', 'Súbor');


	    $form->addSubmit('uloz','Uloz')->onClick[]=  callback($this, 'nazovFormSubmitted');
	    $form->addSubmit('cancel','Storno')->onClick[]=  callback($this, 'cancelFormSubmitted');

	    return $form;
	}
?>

obsluzna metoda

<?php
public function  nazovFormSubmitted($form)
	{
	    $values = $form->getForm()->getValues();
	    //ziska nazov subor
	$suborNazov =$values->nazovSuboru->getName( );
	//unset($values->nazovSuboru);
	//prida nazov suboru do pola $values
	//$values["nazovSuboru"]=$suborNazov;
	//vybere vlastnosti o subore
	$subor = $form['nazovSuboru']->getValue();

	//ulozi na server subor
	$imgUrl = $this->context->dirs['wwwDir'] . '/images/horniny/' . $subor->name;
	$subor->move($imgUrl);
	//$this->naleziskaObrazokRepository->vlozObrazok($values);


	    $id = (int) $this->getParameter('id');
	   if($id){
		$this->horninaObrazokRepository->findById($id)->update($values);
		$this->flashMessage('Nazov upraveny');
	  } else {
		$this->horninaObrazokRepository->findAll()->insert($values);
		$this->flashMessage('Nazov pridany');

	    }
	    //$this->redirect('default');
	    dump($values);
	}

?>
vvoody
Člen | 910
+
0
-
$values = $form->getForm()->getValues();

Nepríde ti tento riadok divný? Od formu si pýtať form? Keď naviažeš callback na onClick tlačítka tak ako parameter dostaneš to tlačítko. Takže si to oprav.

public function  nazovFormSubmitted($button)
{
	$form = $button->getForm();
	$values = $form->getValues();
Jan Suchánek
Člen | 404
+
0
-

vvoody: Trošku OT není fakt lepší hodit ten soubor do db a až potom si ho vytáhnout já, že takhle musí člověk řešit i konflikty názvů souborů apod. Já uploaduji soubory do spešl tabulky pro soubory a používám ji jen když nemám vytvořenou cache v file systemu, pokud migruji tak jen kopiruji db.

Přijde mi, že řešit konflikty názvů souborů, nekompletnost souborů při případné migraci apod. je naprosto nepoužitelné, navíc do db mohu nahrát klidně x souborů s stejným názvem. Možná je to špatné řešení, ale mě vyhovuje.

Editoval jenicek (6. 2. 2014 11:58)

cujan
Člen | 410
+
0
-

oki len ja uz dokazem tahat veci ako meno suboru atd…len ako ho fyzicky presunut do konkretneho adresara…

vvoody
Člen | 910
+
0
-

jenicek: Ak ti nevadí že každý request na súbor znamená spustenie nette a pripojenie do databáze, tak potom tam nevidím žiadny iný problém.

Editoval vvoody (6. 2. 2014 12:17)

cujan
Člen | 410
+
0
-

jenicek napsal(a):

vvoody: Trošku OT není fakt lepší hodit ten soubor do db a až potom si ho vytáhnout já, že takhle musí člověk řešit i konflikty názvů souborů apod. Já uploaduji soubory do spešl tabulky pro soubory a používám ji jen když nemám vytvořenou cache v file systemu, pokud migruji tak jen kopiruji db.

Přijde mi, že řešit konflikty názvů souborů, nekompletnost souborů při případné migraci apod. je naprosto nepoužitelné, navíc do db mohu nahrát klidně x souborů s stejným názvem. Možná je to špatné řešení, ale mě vyhovuje.

a ako nato? urcite by to bolo najlepsie…

Jan Suchánek
Člen | 404
+
0
-

vvoody: No ja data nahraju do db. A pri prvnim pozadavku je cachuji na disk a pak uz je vzdy taham z disku v db mam vzdy jen original.