Při použití handle se ztratí parametr presenteru

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

Zdravím. Mám tabulku položek a přidruženou tabulku se jmény souborů. Na editační stránce je kromě formuláře pro úpravu položky seznam souborů a ten má umožňovat smazání: smazat z tabulky, smazat z disku:

public function actionEdit($id) {
	//položka
	$this->template->item = $this->repository->table('items')->get($id);
	//seznam souborů, co patří k položce
	$this->template->files = $this->repository->table('files')->where('items_id', $id);
}

public function handleFileDelete($id)
	{
		$this->repository->table('files')->get($id)->delete();
		// + unlink fyzického souboru
		$this->redirect('this');
	}

v šabloně

{$item->id} // např. ID = 1, takže adresa /homepage/edit/1

<p>soubory:</p>

{foreach $files as $f}
    <li>
        <a href="{$path}">{$f->filename}</a>
        <a href="{link fileDelete! $f->id}" onclick="return confirm('Smazat soubor {$f->filename}?')">smazat</a>
    </li>
{/foreach}

Jenže vygenerovaný odkaz vypadá takto /homepage/edit/389?do=fileDelete. To znamená, že se snaží načíst úplně jinou položku, v tomto případě č. 389, což je ID mazaného souboru. Prosím co dělám špatně?

Editoval ludek (16. 9. 2014 8:10)

castamir
Člen | 629
+
+1
-

Tím, že pojmenuješ parametr v metodě handleFileDelete opět jako id, pak jím přepíšeš id souboru. Zkus tu proměnnou v tom signálu pojmenovat jinak a (v závislosti na nastavení rout) budeš muset nejspíš i vytvářet odkazy následovně:

<a href="{link fileDelete! 'foo' => $f->id}">smazat</a>

pro následující metodu signálu

public function handleFileDelete($foo)
{
	// ...
}
ludek
Člen | 83
+
0
-

Díky moc za radu. Fakt stačilo přejmenovat. To mě vůbec nenapadlo.

	public function handleFileDelete($file_id)
	{
		$this->repository->table('files')->get($file_id)->delete();
		$this->redirect('this');
	}

A už to funguje.

Editoval ludek (16. 9. 2014 8:11)