Undefined variable: imageStorage

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

Ahojte všetci, mám webstránku ktorá funguje na tomto systéme nette a moc sa v nom nevyznám. Pri pridávani fotiek mi začalo hlasiť error. Vyberem fotku napisem jej meno odoslem a vyskoci ladenka. No hate, som nový. :-)

Ďakujem

Undefined variable: imageStorage

$id = $this->getParameter(‚id‘);
111:
112: $data = array(
113: ‚gal_cat_id‘ ⇒ $id,
114: ‚name‘ ⇒ $values->name,
115: ‚img‘ ⇒ $file->getName(),
116: );
117:
118: if($file->isOk()) {
119: /** @var Brabijan\Images\ImageStorage $imageStorage */
120: $imageStorage->upload($fileUpload);
121:
122: $imgs = Nette\Image::fromFile($file);
123:
124: $imgs->save(„static/galerie/“ . $file->getName());`

Pavel Kravčík
Člen | 1196
+
0
-
  1. Formátuj kód.
  2. Ta chyby je celkem čitelná Undefined variable: imageStorage – nikde nemáš definovanou proměnnou. Tj. buď použiješ nějaké new ImageStorage nebo si to tam dotáhneš před DI. To už se bude dát zjistit z nějaké dokumentace toho doplňku.
chemix
Nette Core | 1310
+
0
-

Ahoj, @quickyx, ja pouzivam BrabijanImages asi nejak takto (viz nize kod), je to trosku komplexnejsi ukazka, ale snad pochopitelna.

Obrazky si ukladam do slozky „project/2015/10“ podle roku a mesice, zaroven vymyslim nahodne jmeno a vygeneruju nahledovy obrazek at je uz pripraveny. A do db si ukladam vice informaci, ale to uz zalezi na pouziti.
 `

class FormExamplePresenter extends BasePresenter
{
	use \Brabijan\Images\TImagePipe;

	/**
	 * @inject
	 * @var \Brabijan\Images\ImageStorage
	 */
	public $imageStorage;

...

	public function exampleFormSubmitted(Form $form, $values)
	{
		// ...

		/** @var \Nette\Http\FileUpload */
		$file = $form->file;
		if ($file->isOk()) {
			$year = date('Y');
			$month = date('m');
			$namespace = "project/{$year}/{$month}";

			$this->imageStorage->setNamespace($namespace);

			$image = $this->imageStorage->save($file->getContents(), $file->getName());

			$size = $image->getSize();
			$filename = pathinfo($image->getFile(), PATHINFO_BASENAME);

			// ulozeni do DB
			$this->addImage($filename, $namespace, $size->getWidth(), $size->getHeight(), $file->getName(), $file->getContentType());


			// Prepare thumbnail
			$this->imgPipe->setNamespace($namespace);
			$this->imgPipe->request($filename, '100x100', 'exact');

			// ...
	}

	private function addImage($filename, $namespace, $width, $height, $originalName, $contentType)
	{
		$image = [
			'namespace' => $namespace,
			'filename' => $filename,
			'width' => $width,
			'height' => $height,
			'content_type' => $contentType,
			'original_name' => $originalName,
			'created_by' => $this->getUser()->getId(),
			'created_at' => new \DateTime()
		];
		// a ulozim si to do databaze, idelane pres managera, na hulvata primo
		$this->database->table('image')->insert($image);
	}

...
quickyx
Člen | 3
+
0
-

Takto vyzera cely moj GaleriePresenter v zlozke AdminModule, vie mi to tu niekto poupravit, aby to fungovalo? Lebo neviem nato prijst. Moc neprogramujem skorej dizajnujem :) budem vdacny

<?php

namespace AdminModule;

use Nette\Application\UI\Form,
	Nette\Security\AuthenticationException;

use Brabijan\Images\TImagePipe;

class GaleriePresenter extends BasePresenter {
	public function beforeRender() {
		if (!$this->getUser()->isLoggedIn()) {
            $this->redirect(':Admin:Log:in');
        }

		$this->template->settings = $this->database->getSettings();
	}

	public function actionDelete($id) {
		if(!$id) {
			$this->flashMessage('Pro smazání obrázku musíte zadat ID.', 'error');
            $this->redirect(':Admin:Main:galerie');
		}

		$check = $this->database->getGalerie()->where('id', $id)->fetch();

		if($check == FALSE) {
			$this->flashMessage('Neplatné ID.', 'error');
            $this->redirect(':Admin:Main:galerie');
		}
	}

	public function actionAdd($id) {
	}

	public function actionDeleteCat($id) {
		if(!$id) {
			$this->flashMessage('Pro smazání kategorie musíte zadat ID.', 'error');
            $this->redirect(':Admin:Main:galerie');
		}

		$check = $this->database->getGalCat()->where('id', $id)->fetch();

		if($check == FALSE) {
			$this->flashMessage('Neplatné ID.', 'error');
            $this->redirect(':Admin:Main:galerie');
		}

		foreach($check->related('galerie') as $obj) {
			$gal = $this->database->getGalerie()->where('id', $obj->id)->fetch();
			@unlink('static/galerie/' . $gal['img']);
			$this->database->deleteGalerie($obj->id);
		}

		$this->database->deleteGalerieCat($id);

        $this->flashMessage('Galerie byla smazána.', 'success');
        $this->redirect(':Admin:Main:galerie');


	}

	public function createComponentDeleteForm() {
		$form = new Form;
		$form->addProtection('Platnost formuláře vypršela, aktualizujte stránku a akci opakujte.');

		$form->addSubmit('submit', 'Smazat');

		$form->onSuccess[] = callback($this, 'completeDeleteForm');
		return $form;

	}

	public function completeDeleteForm(Form $form) {
		try {
			$id = $this->getParameter('id');
			$gal = $this->database->getGalerie()->where('id', $id)->fetch();
			unlink('static/galerie/' . $gal['img']);
			$this->database->deleteGalerie($id);
            $this->flashMessage('Obrázek byl smazán.', 'success');
            $this->redirect(':Admin:Main:galerie');

		} catch (AuthenticationException $e) {
            $form->addError($e->getMessage());
		}
	}

	public function createComponentAddForm() {
		$form = new Form;
		$form->addProtection('Platnost formuláře vypršela, aktualizujte stránku a akci opakujte.');

		$form->addText('name', 'Název:')
				->addRule(Form::MAX_LENGTH, 'Název je příliš velký', 40);
		$form->addUpload('img', 'Obrázek:');

		$form->addSubmit('submit', 'Přidat');

		$form->onSuccess[] = callback($this, 'completeAddForm');
		return $form;

	}

	public function completeAddForm(Form $form) {
		try {
			$values = $form->getValues();
			$file = $values->img;
			$id = $this->getParameter('id');

			$data = array(
				'gal_cat_id' => $id,
				'name' => $values->name,
				'img' => $file->getName(),
			);

			if($file->isOk()) {
				/** @var Brabijan\Images\ImageStorage $imageStorage */
				$imageStorage->upload($fileUpload);

				$imgs = Nette\Image::fromFile($file);

				$imgs->save("static/galerie/" . $file->getName());
				$file->move("static/galerie/" . $file->getName());
				$this->database->setGalerie($data);
			} else {
				$this->flashMessage('Obrázek nebylo možno přidat.', 'error');
				$this->redirect(':Admin:Main:galerie');
			}

            $this->flashMessage('Obrázek byl přidán.', 'success');
            $this->redirect(':Admin:Main:galerie');

		} catch (AuthenticationException $e) {
            $form->addError($e->getMessage());
		}
	}

	public function createComponentAddGalForm() {
		$form = new Form;
		$form->addProtection('Platnost formuláře vypršela, aktualizujte stránku a akci opakujte.');

		$form->addText('name', 'Název:')
				->addRule(Form::MAX_LENGTH, 'Název je příliš velký', 40);

		$form->addSubmit('submit', 'Přidat');

		$form->onSuccess[] = callback($this, 'completeAddGalForm');
		return $form;

	}

	public function completeAddGalForm(Form $form) {
		try {
			$values = $form->getValues();

			$data = array(
				'name' => $values->name
			);

			$this->database->setGalCat($data);
            $this->flashMessage('Galerie byla přidána.', 'success');
            $this->redirect(':Admin:Main:galerie');

		} catch (AuthenticationException $e) {
            $form->addError($e->getMessage());
		}
	}

}

Editoval quickyx (2. 10. 2015 1:52)

Azathoth
Člen | 495
+
0
-

do budoucna doporučuji si najít programátora. nette není wordpress, aby tam mohl přidávat věci designer.

Jan Mikeš
Člen | 771
+
0
-

Mas traitu pouzitou mimo deklaraci tridy. Ale jak pise @Azathoth toto jsou zakladni veci OOP, zkus kod predat nekomu kdo mu rozumi, vidim tam totiz dalsich X chyb.
Mas tam pouzite namespacy, ktere neexistuji (Napr pouzivas Nette\Image bez uvedeni Nette v use), dale ti chybi uplne deklarovana promenna $imageStorage, kterou pouzivas (mimochodem zde by melo byt $this->imageStorage, pokud ji vyuzivas ve funkci). Chyb je tam spousta…

quickyx
Člen | 3
+
0
-

Ďakujem problem vyriešený. :-) Do buducna treba mať aj programatora. :-)

Jan Suchánek
Člen | 404
+
0
-

@quickyx: Nainstaluj si PhpStorm ten ti bude našeptávat co je použité a co ne a vklidu se uč každej nějak začínal.