Diskuze: nette MultiUpload obrázků
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Zkusil bych jit poporade
enctype="multipart/form-data"
ahoj, hrál jsem si stím a zkoušel jsem možnosti a zjistil jsem že
obrázky k uploadu neprojdou formulářem.
Formulář má
enctype="multipart/form-data"
a v presenteru mám use:
namespace App\CoreModule\Presenters;
use App\CoreModule\Model\ReferenceManager;
use Nette\Application\BadRequestException;
use Nette\Application\UI\Form;
use Nette\Database\UniqueConstraintViolationException;
use Nette\Utils\ArrayHash;
use Nette\Http\FileUpload;
use Nette\Utils\Image;
a zpracování formuláře:
public function editorFormSucceeded($form, $values)
{
// Převede pole obecných souborů na pole obrázků.
$images = array_map(function (FileUpload $image) {
return $image->toImage();
}, $values->images);
$values->offsetUnset('images');
$url = $values->url;
$images_count = $values->images_count;
try {
$this->referenceManager->saveReference($values);
$this->referenceManager->saveReferenceImages($values->url, $images, $values->images_count);
$this->flashMessage('Reference byla úspěšně uložena.');
if ($values->images){
$this->redirect('this');
}else{
$this->redirect(':Core:Reference:', $values->url);
}
} catch (UniqueConstraintViolationException $ex) {
$this->flashMessage('Reference s touto URL adresou již existuje.');
}
}
podmínkou if na redirect jsem testoval, zda prošli obrázky ke
zpracování.
Já nevidím, proč by to nemělo fungovat.
Ještě multiupload do formuláře je přidán takto:
$form->addMultiUpload('images', 'Obrázky')->setAttribute('accept', 'image/*');
Nejsem si jisty, jestli bys mel mit Model pro kazdy Presenter (soudim dle toho, ze mas Model pro Reference) ... Zkus sem hodit cely kod, kterym tvoris formular a rovnou i metodu SaveReferenceImages z referenceManageru
vytvoření formuláře:
protected function createComponentEditorForm()
{
$form = new Form;
$form->addHidden('reference_id');
$form->addHidden('images_count');
$form->addText('title', 'Titulek')->setRequired();
$form->addText('url', 'URL')->setRequired();
$form->addMultiUpload('images', 'Obrázky')->setAttribute('accept', 'image/*');
$form->addText('description', 'Popisek')->setRequired();
$form->addTextArea('content', 'Obsah');
$form->addSubmit('submit', 'Uložit referenci');
$form->onSuccess[] = [$this, 'editorFormSucceeded'];
return $form;
}
SaveReferenceImages:
const IMAGES_PATH = 'images/reference/';
...
public function saveReferenceImages($url, $images, $images_count)
{
$i=0;
foreach ($images as $image) {
$image->resize(null, self::IMAGE_SIZE);
$image->save(self::IMAGES_PATH . $url . '_' . $i . '_' . $images_count . '.jpg', null, Image::JPEG);
$images_count++;
}
}
tato funkce je zjednodušená, abych lépe hledal chybu při
nahrávání.
Ale jak jsem psal v minulém příspěvku, tak už ani do presenteru do
zpracování formuláře FormSucceeded nejpřijdou ty vybrané obrázky.
Alespoň myslím, že podmínka if ($values->images) by měla fungovat a
jelikož vyjde negativně, tím images nic neobsahují.
Achich ouvej kdyz si das dump() nebo var_dump() HNED na $values po odeslani formulare, tak tam ty obrazky jsou nebo ne ?
neumím používat dump()... udělám dump($values); ? a nic víc? a kam se mi to vypíše?
omlouvám se, nemám moc skušeností s nette začínám sním
udělal jsem tedy do zpravování formuláře dump()
public function editorFormSucceeded($form, $values)
{
dump($values);
ale vůbec nic to neudělá.
Pole values by se mělo vypsat na stránku že?
Problém je v tom že ve formuláři máš:
$form->onSuccess[] = [$this, 'editorFormSucceeded'];
Ale metoda pro zpracování je
public function saveReferenceImages($url, $images, $images_count)
A prostě editorFormSucceeded !== saveReferenceImages
Zobrazeno 9 zpráv z 9.