Editace akce s možností uploadu obrázku
- xciza
- Člen | 194
Ahoj,
na webu mám vypisované akce s obrázkem z db. Teď bych je potřeboval
upravovat tím způsobem, že když uživatel nepotřebuje změnit obrázek ale
jen text, tak bude mít možnost checkboxem zaškrtnou, zda ten obrázek chce
nebo ne a na základě toho to bude nebo nebude měnit údaje v db u sloupce
s adresou obrázku. Jak na to prosím? Nebo je nějaký lepší způsob jak
tohle zajisti? Abych zkrátka mohl editovat akci bez změny obrázku, ale mít
i možnost editovat akci s obrázkem?
Díky
- Tomáš Votruba
- Moderator | 1114
Ahoj, nestačilo by obrázek změnit pouze v případě, kdy jej uživatel nahraje?
Něco ve stylu:
public function processForm($form)
{
$values = $form->values;
if ($values->image && $values->image->isOk()) {
// upload new image
} else {
// don't change anything
unset($values->image);
}
// save $values to db
}
Editoval Tomáš Votruba (28. 4. 2014 11:51)
- xciza
- Člen | 194
Tak to bohužel vůbec nic neudělá :( Mám tuto obsluhu formuláře:
public function editFormSubmitted(Form $form) {
$id = (int) $this->getParameter('id');
$values = $form->getValues();
if ($values->img && $values->img->isOk()) {
$file = $values['img'];
$imgUrl = 'images/data/' . time() . "_" . $file->name;
$tmp_file = $file->getTemporaryFile();
$image = Image::fromFile($tmp_file);
$image->resize(470, NULL);
$image->save($imgUrl);
} else {
unset($values->img);
}
$this->private->updateTab($id, $form->values->text, $imgUrl);
$this->flashMessage('Tab aktualizován', 'success');
$this->redirect('Private:default');
}
Pokud obrázek nevyberu, tak po kliknutí na odeslání formuláře se vůbec nic nestane (žádné přesměrování, žádný error, prostě nic). Pokiud obrázek normálně vyberu a form potvrdím tak je vše ok.
- Tomáš Votruba
- Moderator | 1114
Jak vypadá formulář? Možná tam máš na image
nějaké
pravidlo.
P.S.: FileUpload
má šikovnou metodu toImage(),
tou můžeš získat obrázek $values->image->toImage
Editoval Tomáš Votruba (28. 4. 2014 13:02)
- xciza
- Člen | 194
zde:
protected function createComponentEditForm() {
$form = new Form();
$form->addTextArea('text')
->getControlPrototype()->class('mceEditor');
$form->addUpload('img', 'Image:')
->addRule(Form::IMAGE, 'File must be an image - .jpg, .gif, .png')
->addRule(Form::MAX_FILE_SIZE, 'File size must be maximum 2Mb.', 2147483648);
$presenter = $this;
$form->addSubmit('create', 'Submit')->setAttribute('class', 'button');
$form->addSubmit('cancel', 'Cancel')
->setAttribute('class', 'button gray')
->setValidationScope(FALSE)
->onClick[] = function () use ($presenter) {
$presenter->redirect('default');
};
$form->onSuccess[] = callback($this, 'editFormSubmitted');
$form->addProtection('Vypršel časový limit.'); //Prevent from Cross-Site Request Forgery (CSRF)
return $form;
}
- Tomáš Votruba
- Moderator | 1114
Na addUpload přidej addConditionOn
, viz dokumentace
zde níže
$form->addUpload('img', 'Image:')
->addConditionOn(Form::FILLED)
//..