Ako pri update príspevku nenahrať znova ten istý obrázok
- SontoEremo
- Člen | 341
Zdravím ľudia…
Riešim taký malý zádrhel s update-tom príspevku normálne vytvorím nový
príspevok teda (názov, obrázok a text) všetko je ok až na
úpravu keď upravujem príspevok a nevyberiem obrázok vyhodí mi
túto chybu
Warning
rename(,assets/web/default/images/news/): Invalid argument
Source file
File: ...\tennails\vendor\nette\http\src\Http\FileUpload.php:152
142:
143: /**
144: * Move uploaded file to new location.
145: * @param string
146: * @return self
147: */
148: public function move($dest)
149: {
150: @mkdir(dirname($dest), 0777, TRUE); // @ - dir may already exist
151: @unlink($dest); // @ - file may not exists
152: if (!call_user_func(is_uploaded_file($this->tmpName) ? 'move_uploaded_file' : 'rename', $this->tmpName, $dest)) {
153: throw new Nette\InvalidStateException("Unable to move uploaded file '$this->tmpName' to '$dest'.");
154: }
155: chmod($dest, 0666);
156: $this->tmpName = $dest;
Takže musím znova nahrať ten istý obrázok vtedy všetko prebehne bez chyby neviem ako povedať formuláru že ak nechcem nahrať obrázok ostane ten pôvodný a ostatné úpravy sa vykonajú…
Používam Nette 2.3.7
Formulár používam z Nette 2.3.7->examples->CD-collection čiže je aj
na pridávanie aj na úpravu a na upload obrázku som použil tento
príklad/príspevok
/**
* Edit form factory.
* @return Form
*/
protected function createComponentNewsForm() {
$newsForm = new Form;
$newsForm->addText('newsTitle', 'Názov novinky')
->setAttribute('class', 'form-control');
$newsForm->addUpload('imageType', 'Nahrať obrázok');
$newsForm->addTextArea('newsText', 'Text')
->setAttribute('class', 'form-control');
$newsForm->addText('newsDateAdd')
->setAttribute('hidden', 'hidden');
$newsForm->addText('newsTimeAdd')
->setAttribute('hidden', 'hidden');
$newsForm->addSubmit('addNews', 'Pridať do noviniek')
->setAttribute('class', 'btn btn-success btn-lg noBorder noRadius')
->onClick[] = array($this, 'newsFormSucceeded');
$newsForm->addSubmit('cancel', 'Zrušiť')
->setAttribute('class', 'btn btn-info btn-lg noBorder noRadius')
->setValidationScope(array())
->onClick[] = array($this, 'formCancelled');
$newsForm->addProtection();
return $newsForm;
}
public function newsFormSucceeded($button) {
$values = $button->getForm()->getValues();
$id = (int) $this->getParameter('id');
$values->newsDateAdd = date('d.m.Y');
$values->newsTimeAdd = date('H:i:s');
$filename = $values->imageType->getName();
$path = 'assets/web/default/images/news';
$values->imageType->move($path.'/'.$filename);
if ($id) {
$this->newsRepository->findById($id)->update($values);
$this->flashMessage('Novinka bola aktualizovaná!', 'warning');
} else {
$this->newsRepository->insert($values);
$this->flashMessage('Novinka bola pridaná!', 'success');
}
$this->redirect(':Webadmin:Docs:novinky');
}
Všetkým vopred Ďakujem za pomoc…
- SontoEremo
- Člen | 341
Nazdar @cubic
Vďaka za pomoc sorry ale kam mám ten tvoj kód umiestniť? :D ja viem Laická
otázka ale fakt neviem, že kam…
- cubic
- Člen | 45
@SontoEremo Obal tou mojí podmínkou ty 3 řádky, které tam už
máš (a které mám v podmínce).
Nebo-li pokud je vybraný obrázek, nastaví se $filename, $path a přesune
obrázek na zvolenou cestu.
Kromě toho bys ale ještě měl kontrolovat, jestli je uploadovaný soubor skutečně obrázek pomocí isImage().
<?php
public function newsFormSucceeded($button) {
$values = $button->getForm()->getValues();
$id = (int) $this->getParameter('id');
$values->newsDateAdd = date('d.m.Y');
$values->newsTimeAdd = date('H:i:s');
if (!empty($values->imageType) && $values->imageType->isImage()) {
$filename = $values->imageType->getName();
$path = 'assets/web/default/images/news';
$values->imageType->move($path.'/'.$filename);
}
if ($id) {
$this->newsRepository->findById($id)->update($values);
$this->flashMessage('Novinka bola aktualizovaná!', 'warning');
} else {
$this->newsRepository->insert($values);
$this->flashMessage('Novinka bola pridaná!', 'success');
}
$this->redirect(':Webadmin:Docs:novinky');
}
?>
- SontoEremo
- Člen | 341
Ďakujem za kód aj pomoc aj trpezlivosť ale stále to nerieši môj
problém
keď dám upraviť zmením názov text ale obrázok už nevyberem tak mi to
síce aktualizuje úpravu ale obrázok sa zmaže
- cubic
- Člen | 45
Protože nevidím šablonu na frontendu ani strukturu tabulky, tak je to takové tipování. Nejspíš ti tam ale prázdná hodnota v imageType přepisuje záznam v DB, takže ji stačí odstranit pomocí unset().
<?php
if (!empty($values->imageType) && $values->imageType->isImage()) {
/* původní kód */
} else {
unset($values->imageType);
}
?>