formulář pro vložení a získání id záznamu pro přejmenování odeslaného souboru
- mardon
- Člen | 59
pro vložení záznamu do db používám
protected function createComponentPostRecord()
{
$form = new Nette\Application\UI\Form;
$form->addText('title', 'Titulek:')
->setRequired();
$form->addTextArea('content', 'Popis:')
->setRequired();
$form->addTextArea('adress', 'Adresa:')
->setRequired();
$form->addText('url', 'Adresa webu:')->addRule($form::URL, 'Zadejte url webu ve správném formátu');
$form->addText('email', 'Zadejte email:')->addRule($form::EMAIL, 'Zadali jste neplatný email.')->setRequired();
$form->addTextArea('telefon', 'Telefon:')
->setRequired();
$form->addSelect('category','Kategorie:',$this->recordFacade->getCatbyId());
$form->addUpload('img', 'Foto:')
->addRule($form::IMAGE, 'Avatar musí být JPEG, PNG nebo GIF.')
->addRule($form::MAX_FILE_SIZE, 'Maximální velikost souboru je 64 kB.', 1000 * 1024 /* v bytech */);
$form->addSubmit('send', 'Uložit');
$form->onSuccess[] = $this->postRecordSucceeded;
return $form;
}
public function postRecordSucceeded($form)
{
$vals = $form->getValues();
$this->recordFacade->add(
$vals->title, $vals->content, $vals->category, $vals->adress, $vals->url, $vals->email, $vals->telefon
);
if ($vals['img']->isOk()) {
$filename = $vals['img']->getSanitizedName();
$vals['img']->move("../files/$filename");
}
$this->flashMessage("Příspěvek byl úspěšně publikován.", 'success');
$this->redirect('Homepage:');
}
chtěla bych ale upolodovaný soubor přejmenovat podle id vloženého záznamu. Lze to nějak jednoduše povést? nebo doporučujete jiný postup pro přejmenování uploadvaného obrázku?
- MartinitCZ
- Člen | 580
Stačí, když si funkci $this->recordFacade->add(...)
upravíš tak, aby vracela vložené ID (např. pro dibi:
return $this->db->getInsertId();
).
Pak už jen:
public function postRecordSucceeded($form)
{
$vals = $form->getValues();
$fileId = $this->recordFacade->add(
$vals->title, $vals->content, $vals->category, $vals->adress, $vals->url, $vals->email, $vals->telefon
);
if ($vals['img']->isOk()) {
$filename = $vals['img']->getSanitizedName();
$ext = '...' // Z $filename si vytáhneš koncovku.
$vals['img']->move("../files/{$fileId}{$ext}");
}
$this->flashMessage("Příspěvek byl úspěšně publikován.", 'success');
$this->redirect('Homepage:');
}
Editoval martinit (30. 12. 2013 20:07)
- mardon
- Člen | 59
martinit napsal(a):
Stačí, když si funkci
$this->recordFacade->add(...)
upravíš tak, aby vracela vložené ID (např. pro dibi:return $this->db->getInsertId();
).
Pak už jen:public function postRecordSucceeded($form) { $vals = $form->getValues(); $fileId = $this->recordFacade->add( $vals->title, $vals->content, $vals->category, $vals->adress, $vals->url, $vals->email, $vals->telefon ); if ($vals['img']->isOk()) { $filename = $vals['img']->getSanitizedName(); $ext = '...' // Z $filename si vytáhneš koncovku. $vals['img']->move("../files/{$fileId}{$ext}"); } $this->flashMessage("Příspěvek byl úspěšně publikován.", 'success'); $this->redirect('Homepage:'); }
Používám Nette\Database
- Jan Suchánek
- Člen | 404
To muzes napsat lip ne? Hlavne nedavno se probiralo zda soubor ukladat do db ci ne, tzn. podobne tema.
- mardon
- Člen | 59
batko napsal(a):
nette/database při insertu vrací ID
<?php $ins = $this->db->table("foo")->insert(..... $ins->id //vrací id ?>
ano již jsem si v dokumentaci přečetla že $this->db->table(„foo“)->insert(..... vrací ActiveRecord jenom ještě pořád nevím proč mi funguje oboje
$ins->id
$ins['id']