Jak na upload souboru do adresáře ve formuláři s ostatními daty posílanými do databáze

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

Dobrý den,
mám takovýto formulář:

$form = new NAppForm;
$form->addFile('filepath_kategorie');
$form->addText('car_kod_produkty', 'Bar code:')
        ->addRule(NForm::FILLED, 'Please enter a Bar code.')
	->addRule(NForm::NUMERIC, 'Bar code must be numeric');
$form->addText('nazev_produkty', 'Name:')
	->addRule(NForm::FILLED, 'Please enter a name.');
...
$form->addSubmit('save', 'Save')->getControlPrototype()->class('default');
$form->addSubmit('cancel', 'Cancel')->setValidationScope(NULL);
$form->onSubmit[] = callback($this, 'ProduktyFormSubmitted');

Potřeboval bych aby se ten soubor který chci uploadnout nahrál do nějakého adresáře a do databáze se poslala cesta k němu do atributu

filepath_kategorie

společně s dalšími hodnotami z formuláře (vše do jedné tabulky).
O to se stará tato funkce.

public function produktyFormSubmitted(NAppForm $form) {
        if ($form['save']->isSubmittedBy()) {
            $id = (int) $this->getParam('id');
            $produkty_model = new produkty();
            if ($id > 0) {
                $produkty_model->update($id, $form->getValues());
                $this->flashMessage('The product has been updated.');
            } else {
                $produkty_model->insert($form->getValues());
                $this->flashMessage('The product has been added.');
            }
        }

        $this->redirect('show');
    }

Koukal jsem po fóru atp. ale nikde jsem nenašel nic co by mi pomohlo.
P.S. nechci zatím použít žádný javascript, jen v případě že by to jinak nešlo.
Díky za odpovědi

Jur4
Člen | 51
+
0
-

Takhle nějak by měla vypadat metoda na zpracování. Nezkoušel jsem to.

<?php
public function produktyFormSubmitted(NAppForm $form) {
        if ($form['save']->isSubmittedBy()) {
            $id = (int) $this->getParam('id');
            $values = $form->getValues();
            $produkty_model = new produkty();

            $file = $values["filepath_kategorie"];
            if ($file->isOk()) {
                $path = "/path/to/upload/" . $file->getName();
                $file->move($path);
            }

            $values["filepath_kategorie"] = $path;

            if ($id > 0) {
                $produkty_model->update($id, $values);
                $this->flashMessage('The product has been updated.');
            } else {
                $produkty_model->insert($values);
                $this->flashMessage('The product has been added.');
            }
        }

        $this->redirect('show');
}
?>

Viz https://api.nette.org/…dedFile.html.

koprkuba
Člen | 24
+
0
-

Super, už to jde, původně jsem zkoušel pořád přepisovat tu proměnnou

$form['filepath_kategorie']

takhle už to de tak super, díky moc

westrem
Člen | 398
+
0
-

Skus postnut ako vyzeraju tie metody insert a update, dibi nema problem s url a roznymi znakmi, ona to escapuje sama

Edit: Tak uz nic ;) .. som rad, ze problem solved

Editoval westrem (14. 11. 2010 11:33)