Tlačítko v latte s value odkazující na action
- popcorn
- Člen | 28
Ahoj, potřeboval bych si v latte vytvořit xx tlačítek, které budou mít value a budou odkazovat na actionRemove, ale nevím, jak přesně toho docílit abych získal tu hodnotu z tlačítka. Musím pro to vytvořit celý formulář i když potřebuji jen tlačítko?
Momentálně jsem se dostal sem:
Latte:
<form action=":Settings:removeUser"><button type="submit" value="{user['id']}">Remove</button></form>
V SettingsPresenter mám:
public function actionRemoveUser()
{
$this->settingsManager->removeUser();
$this->redirect(':Default');
}
^ Zde právě nevím kam dát zařadit tu value z tlačítka jako proměnnou.
Nebo by jste to řešili celé jinak? Popř. jak?
Editoval popcorn (3. 9. 2019 17:25)
- Kamil Valenta
- Člen | 822
No a proč je to formulář? Proč to není jen odkaz na actionu / handle s parametrem?
public function handleRemoveUser($id)
{
$this->settingsManager->removeUser($id);
$this->redirect(':Default');
}
<a n:href="RemoveUser! id=> $user['id']">Remove</a>
Editoval kamil_v (3. 9. 2019 22:19)
- jiri.pudil
- Nette Blogger | 1032
Ahoj, s formulářem to budeš mít jednodušší; pokud jich má být víc,
můžeš si pomoci Multiplierem
.
Jinak formulář je sémanticky rozhodně lepší volba než odkaz, protože
kliknutí na odkaz standardně vyvolá GET
request a
GET
request vůbec nemá co ovlivňovat (mazat) data.
- Kamil Valenta
- Člen | 822
To se mi zdá trochu teoretické. Obdobně lze říci, že formulář vyvolá request POST, který také nemá mazat data. A že by někdo vytvářel hlavičku DELETE (mimo API), o tom nevím. Dost běžně se odkazem maže, pro příklad nemusíme daleko, zdejší forum je jedním z mnoha příkladů.
Ale nic to nemění na tom, že by to formem nešlo. Jen se tazatel ptal, zda na to form potřebuje. Úplně nevidím, v čem je to s formem jednodušší, pokud bych ho ještě měl vykreslovat přes multiplier… Textový odkaz vyřeším foreachem v šabloně…
- jiri.pudil
- Nette Blogger | 1032
To se mi zdá trochu teoretické. Obdobně lze říci, že formulář vyvolá request POST, který také nemá mazat data.
Jasně že je to hodně akademické a ano, ani POST není sémanticky
ideální, ale pořád mi připadá lepší než GET: GET má být z definice
idempotentní, bez specifičtějšího nastavení se běžně kešuje
v prohlížečích, případně ho může zakešovat třeba reverzní proxy
nebo jiný prvek po cestě v síti, a to jsou věci, které pro akce měnící
stav nejsou úplně žádoucí. Před Nette 3.0 se taky snáz řešila ochrana
proti CSRF u formuláře než u odkazu. A další věc je přístupnost,
z pohledu které jsou odkaz a tlačítko dvě odlišné věci s odlišnou
funkcí a <a role="button">
mi ve chvíli, kdy můžu
použít skutečné tlačítko, připadá jako workaround.
Ale uznávám, že formulář je hodně psaní navíc. Jen jsem chtěl nabídnout alternativní pohled a asi jsem málo popsal motivaci, což teď snad napravuji :) Nakonec je to o tom, kde chceš udělat trade-off, a u takového rozhodnutí se mi zdá dobré vědět, proč to dělám a jaké to může mít důsledky.
- Šaman
- Člen | 2667
jiri.pudil:
Nebudeš mít <a role="button">
, ale obyčejný odkaz, který
opticky vypadá, jako tlačítko. V případě CSS bootstrapu třeba
<a class="btn">
. Tohle není věc sémantiky a návrhu html,
ale pouze vzhledu.
A ohledně toho, jestli je lepší použít formulář – v případě, že nepotřebuji žádny vstup od uživatele, tak nevidím důvod používat formulář. Bavíme se třeba o tlačítkách „upravit“ a „vymazat“ v gridech (nebo tady pod každým příspěvkem). Nebo más na mysli jiné případy?
Editoval Šaman (5. 9. 2019 13:54)