addUpload a zachovanie hodnoty

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

Zdravím, používam vo formulári pre editáciu addUpload:

$form->addUpload('imgBrewery', 'Obrázok pivovaru *')
    ->addCondition(Form::FILLED)
    ->addRule(Form::IMAGE, 'Vložte obrázok vo formáte JPEG/PNG/GIF')
    ->addRule(Form::MAX_FILE_SIZE, 'Maximálne veľkosť súboru je 300 kB.', 300 * 1024);

Všetky inputy sa mi predvyplnia, len addUpload nie. Alebo sa automaticky zakaždým vynuluje?

Nechcem pri editácií záznamu zakaždým nahrávať ten istý obrázok.

Viete mi prosím poradiť, ako na to?
Ďakujem.

Mysteria
Člen | 797
+
0
-

Z bezpečnostních důvodů to nejde, mohl bych totiž uživateli předvybrat nějaký „nebezpečný“ soubor.
Nicméně proč bys musel při editaci pokaždé nahrávat obrázek? Přidej podmínku, že když uživatel nevybral žádný soubor tak necháš ten původní a pokud není obrázek povinný, tak ještě nějaké tlačítko na jeho vynulování.

majo1
Člen | 103
+
0
-

vedel by si mi prosím pomôcť so zostavením tejto podmienky?

neviem totiž, čo mám porovnávať a čo k čomu priradiť.
(neviem, či addUpload obsahuje defaulte prázdnu hodnotu – aj po naplnení celého formuláru so setDefaults, či musím success funkcii priradiť parameter s cestami k súboru atď)

Mysteria
Člen | 797
+
0
-

V tom případě by se hodilo hodit sem kód, který obsluhuje odeslání toho formuláře.

majo1
Člen | 103
+
0
-

V modeli

public function saveBrewery($values)
{
    if (!$values['idbrewery'])
        $this->db->insert('?', $values)->into('brewery')->execute();
    else
        $this->db->update('brewery', $values)->where('idbrewery = ?', $values['idbrewery'])->execute();
}

V presenteri render

public function renderUpravPivovar($idexhibition, $idbrewery)
{
    //load single brewery
    if ($idbrewery) ($getBrewery = $this->vystavaManager->getBrewery($idexhibition, $idbrewery)) ? $this['upravitPivovarForm']->setDefaults($getBrewery) : $this->flashMessage('Žiadaná výstava neexistuje!');
    $this->template->breweryinfo = $this->vystavaManager->getBrewery($idexhibition, $idbrewery);
}

V presenteri component form

protected function createComponentUpravitPivovarForm()
{
    $exhibition = (int)$this->getParameter('idexhibition');
    //var_dump($this->context->parameters['wwwDir']); exit;

    $form = new Form;

    $form->addHidden('idbrewery');
    $form->addText('name', 'Názov pivovaru *')->setRequired();
    //$form->addText('imgBrewery', 'Obrázok pivovaru *')->setRequired();
    //$form->addText('imgBreweryteam', 'Obrázok tímu pivovaru *')->setRequired();
    $form->addUpload('imgBrewery', 'Obrázok pivovaru *')
        ->addCondition(Form::FILLED)
        ->addRule(Form::IMAGE, 'Vložte obrázok vo formáte JPEG/PNG/GIF')
        ->addRule(Form::MAX_FILE_SIZE, 'Maximálne veľkosť súboru je 300 kB.', 300 * 1024);
    $form->addUpload('imgBreweryteam', 'Obrázok tímu pivovaru *')
        ->addCondition(Form::FILLED)
        ->addRule(Form::IMAGE, 'Vložte obrázok vo formáte JPEG/PNG/GIF')
        ->addRule(Form::MAX_FILE_SIZE, 'Maximálne veľkosť súboru je 300 kB.', 300 * 1024);
    $form->addText('www', 'Webová stránka pivovaru');
    $form->addHidden('exhibition', $exhibition);
    $form->addInteger('breweryOrder', 'Poradie')
         ->setRequired()
         ->addRule(Form::RANGE, 'Poradie musí byť hodnota od 0 do 999', [0, 999]);
    $form->addSelect('enabled', 'Povoliť?', ['1' => 'Áno', '0' => 'Nie'])
         ->setDefaultValue('1');

    $form->addSubmit('submit', 'Uložiť');

    $form->onSuccess[] = [$this, 'upravitPivovarFormSucceeded'];
    return $form;
}

V presenteri succeed

public function upravitPivovarFormSucceeded($form, $values)
{
    $values = $form->getValues();
    $fileBrewery = $values->imgBrewery;
    $fileBreweryteam = $values->imgBreweryteam;

    if($fileBrewery->isImage() and $fileBrewery->isOk()) {
        $file_ext=strtolower(mb_substr($fileBrewery->getSanitizedName(), strrpos($fileBrewery->getSanitizedName(), ".")));
        $file_name = uniqid(rand(0,20), TRUE).$file_ext;
        $fileBrewery->move($this->context->parameters['wwwDir'] . '/img/pivovary/'. $file_name);
        $values->imgBrewery = 'img/pivovary/'. $file_name;
    }

    if($fileBreweryteam->isImage() and $fileBreweryteam->isOk()) {
        $file_ext=strtolower(mb_substr($fileBreweryteam->getSanitizedName(), strrpos($fileBreweryteam->getSanitizedName(), ".")));
        $file_name = uniqid(rand(0,20), TRUE).$file_ext;
        $fileBreweryteam->move($this->context->parameters['wwwDir'] . '/img/pivovary/'. $file_name);
        $values->imgBreweryteam = 'img/pivovary/'. $file_name;
    }

    try {
        $this->vystavaManager->saveBrewery($values);
        $this->flashMessage('Pivovar uložený.');
        $this->redirect('Vystava:uprav', $values->exhibition);
    } catch (UniqueConstraintViolationException $ex) {
        $this->flashMessage('Pivovar s týmto ID už existuje!');
    }
}

Editoval majo1 (9. 1. 2017 10:58)

Mysteria
Člen | 797
+
0
-

Tak zkus normálně jednoduše:

if (!empty($values->imgBrewery)) {
	if ($fileBrewery->isImage() and $fileBrewery->isOk()) {
		$file_ext = strtolower(mb_substr($fileBrewery->getSanitizedName(), strrpos($fileBrewery->getSanitizedName(), ".")));
		$file_name = uniqid(rand(0, 20), TRUE) . $file_ext;
		$fileBrewery->move($this->context->parameters['wwwDir'] . '/img/pivovary/' . $file_name);
		$values->imgBrewery = 'img/pivovary/' . $file_name;
	}
} else {
	unset($values->imgBrewery);
}

if (!empty($values->imgBreweryteam)) {
	if ($fileBreweryteam->isImage() and $fileBreweryteam->isOk()) {
		$file_ext = strtolower(mb_substr($fileBreweryteam->getSanitizedName(), strrpos($fileBreweryteam->getSanitizedName(), ".")));
		$file_name = uniqid(rand(0, 20), TRUE) . $file_ext;
		$fileBreweryteam->move($this->context->parameters['wwwDir'] . '/img/pivovary/' . $file_name);
		$values->imgBreweryteam = 'img/pivovary/' . $file_name;
	}
} else {
	unset($values->imgBreweryteam);
}
majo1
Člen | 103
+
0
-

to mi ale tracy vyhodí chybu:
SQL translate error: Unexpected Nette\Http\FileUpload

UPDATE `brewery`
SET `idbrewery`='2', `name`=':) happy.', `imgBrewery`=**Unexpected Nette\Http\FileUpload**,
`imgBreweryteam`=**Unexpected Nette\Http\FileUpload**, `www`='', `exhibition`='2', `breweryOrder`=0,
`enabled`=1
WHERE idbrewery = '2'

Editoval majo1 (9. 1. 2017 13:30)

majo1
Člen | 103
+
0
-

do try {}
som pridal

if (is_string($values->imgBrewery) == false) {
    unset($values->imgBrewery);
}
if (is_string($values->imgBreweryteam) == false) {
    unset($values->imgBreweryteam);
}

a tak som problém vyriešil