Nahrávání fotky na web a uložení cesty do db

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

Ahoj, snažím se o nahrávání fotky na web do složky např obrázky a cesta aby se mi uložila do databaze a dopracoval jsem se k chybě Call to undefined function Nette\Http\finfo_file()

Laděnka mi vyhodila chybu na řádku 89:

 }
80:
81:
82:        /**
83:         * Returns the MIME content type of an uploaded file.
84:         * @return string
85:         */
86:        public function getContentType()
87:        {
88:            if ($this->isOk() && $this->type === NULL) {
89:                $this->type = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $this->tmpName);
90:            }
91:            return $this->type;
92:        }

Díky za radu!

Hitny14
Člen | 90
+
0
-

Díky! Ted mám ale jinou chybu Class ‚App\Presenters\String‘ not found

Laděnka vyhazuje chybu na 109 řádku:

 public function processAddZbozi($form)
102:        {
103:            $values = $form->getValues();
104:
105:            try {
106:
107:                if($values->obrazek->isOk() AND $values->obrazek->isImage())
108:                {
109:                    $fileName = "obr_".String::webalize($values->obrazek->getName(), '.');
110:                    $fileTarget = WWW_DIR . "/obrazky/" . $fileName;
111:                }
112:                $this->zboziModel->AddZbozi($values, $fileTarget);
113:                $this->flashMessage('Zbozí bylo uspěšně přidáno', 'success');

Nevím jestli mám dobře namespace

use Nette\Utils;
David Matějka
Moderator | 6445
+
+2
-
  1. trida se nejmenuje Nette\Utils\String, ale Nette\Utils\Strings (s na konci)
  2. v importech musis mit use Nette\Utils\Strings, pri pouziti use Nette\Utils bys v kodu musel pouzivat Utils\Strings, doporucuju nastudovat namespaces

Editoval matej21 (31. 7. 2014 15:21)

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

Ne nemáš:

use Nette\Utils\Strings;

A bylo by dobré si něco o namespace přečíst.

Hitny14
Člen | 90
+
0
-

díky! Ještě mám jednu chybu Call to a member function move() on a non-object

Laděnka řádek 112:

public function processAddZbozi($form)
103:        {
104:            $values = $form->getValues();
105:
106:            try {
107:
108:                if($values->obrazek->isOk() AND $values->obrazek->isImage())
109:                {
110:                    $fileName = "obr_".Strings::webalize($values->obrazek->getName(), '.');
111:                    $fileTarget = WWW_DIR . "/obrazky/" . $fileName;
112:                    $fileName->move(WWW_DIR . "/obrazky/");
113:                }
114:                $this->zboziModel->AddZbozi($values, $fileTarget);
115:                $this->flashMessage('Zbozí bylo uspěšně přidáno', 'success');
116:                $this->redirect('Nastroje:default');
Michal Vyšinský
Člen | 608
+
+1
-

Douč se základy PHP – $fileName nastavuješ na string a pak na něm voláš metodu?

Editoval Michal Vyšinský (31. 7. 2014 17:03)

Hitny14
Člen | 90
+
0
-

na $fileName si vytvořím název obrázku a ten obrázek chci pak nahrát na server

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

Ano, ale nemůžeš move metodu volat na string. move metodu má třída ‚FileUpload‘ takže bys to měl volat na $values->obrazek.

Takže takto:

$values->obrazek->move($fileTarget);

A ještě jedna věc – používáš za blokem ‚if‘ proměnné, které definuješ v tom bloku, takže pokud nebude upload ok nebo to nebude obrázek, tak budeš dostávat chyby, že používáš nedefinovanou proměnnou

Editoval Michal Vyšinský (31. 7. 2014 17:11)

Hitny14
Člen | 90
+
0
-

Supr, díky za radu!