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
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
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)
{
// ...
}