formulář pro vložení a získání id záznamu pro přejmenování odeslaného souboru

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

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
+
0
-

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)

Jan Suchánek
Člen | 404
+
0
-

@martinit: Ta fasada je ok? Neni lepsi predat rovnou array?

mardon
Člen | 59
+
0
-

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
+
0
-

To muzes napsat lip ne? Hlavne nedavno se probiralo zda soubor ukladat do db ci ne, tzn. podobne tema.

batko
Člen | 219
+
0
-

nette/database při insertu vrací ID

<?php
$ins = $this->db->table("foo")->insert(.....

$ins->id //vrací id
?>
mardon
Člen | 59
+
0
-

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']