Uploadovanie – testovanie isset($values->image);

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

Prosím vás,
mám formulár, kde sú dva nepovinné upload buttony. A onsucces vyzerá takto:

$form->onSuccess[] = function (Form $form)
        {
            $values = $form->getValues();
            $path = '/images/invoices/';
			// Najprv zisťujem, či je vôbec nejaký súbor vybratý
            if(isset($values->stamp))
            {
                // Potom či je OK, ale neviem, či to dobre chápem
				if(!$values->stamp->isOk())
                {
                    $form->addError('Pri sťahovaní obrázku pečiatky došlo k chybe. Skúste to znova prosím.');
                }
                else
                {
                    try
                    {
                        $values->stamp->move($path.$values->stamp->getName());
                    }
                    catch (\RuntimeException $e)
                    {
                        $form->addError('Nepodarilo sa uložiť obrázok pečiarky. Skúste to ešte raz prosím.');
                    }
                }
            }
            if(isset($values->logo))
            {

                if(!$values->logo->isOk())
                {
                    $form->AddError('Pri sťahovaní obrázku pečiatky došlo k chybe. Skúste to znova prosím.');
                }
                else
                {
                    try
                    {
                        $values->logo->move($path.$values->logo->getName());
                    }
                    catch (\RuntimeException $e)
                    {
                        $form->addError('Nepodarilo sa uložiť obrázok loga. Skúste to ešte raz prosím.');
                    }
                }
            }
            if(!$form->hasErrors())
            {
                $this->redirect('this');
            }

        };

Problém je v tom, že podmienka isset($values->image) je vždy TRUE. Takže sa to spustí aj keď obrázok nieje vybratý. A to ja nechcem.

Editoval Čamo (2. 12. 2014 10:45)

Mysteria
Člen | 797
+
0
-

dump($form->values) ti vrací co, když nevybereš ten obrázek?

Čamo
Člen | 798
+
0
-

Vracia to:

Nette\Utils\ArrayHash #596c
logo => Nette\Http\FileUpload #a640
name private => NULL
type private => NULL
size private => NULL
tmpName private => NULL
error private => 4
stamp => Nette\Http\FileUpload #9084
name private => NULL
type private => NULL
size private => NULL
tmpName private => NULL
error private => 4

Čiže by som mal otestovať if(!is_null($values->getName)) ak dobre rozumiem?

V každom prípade ďakujem, už to testuje správne, ibaže mi nič neuloží. Asi bude chyba v tej ceste?

Editoval Čamo (2. 12. 2014 11:51)

Michal Vyšinský
Člen | 608
+
0
-

Jistější bude testovat jesti $values->stamp->getError() === UPLOAD_ERR_NO_FILE viz. http://php.net/…d.errors.php

Čamo
Člen | 798
+
0
-

Díky moc všetkým.

Prepísal som to na UPLOAD_ERR_NO_FILE.

Ale v dokumentácii by to mohlo byť popísané.

Editoval Čamo (2. 12. 2014 12:46)