Undefined variable: imageStorage
- quickyx
- Člen | 3
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
- Formátuj kód.
- 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
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
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)
- Jan Mikeš
- Člen | 771
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…
- Jan Suchánek
- Člen | 404
@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.