DataGrid – akce Editace podle ID
- DavidSen
- Člen | 2
Dobrý podvečer, začínám s Nette a zasekl jsem se na téhle situaci.
Na stránce používám https://componette.org/search/?…,
$grid->addNumericColumn('id', 'User ID')->addFilter();
$grid->addColumn('surname', 'Surname')->addFilter();
$grid->addColumn('name', 'Name')->addFilter();
...
$grid->addActionColumn('actions', 'Actions');
$grid->addAction('Edit', 'edit!', Html::el('span')->class('icon icon-edit'), $useAjax = TRUE);
$grid->addAction('Delete', 'delete!', Html::el('span')->class('icon icon-del'), $useAjax = TRUE);
S mazáním problém není, protože jenom zavolám SQL příkaz a refreshnu stránku.
Nevím, jak si však poradit s editací, kde se potřebuji přesměrovat na jinou stránku. Poradíte mi prosím, jak bych si mohl předat ID, abych ho po přesměrování na jiné stránce mohl použít?
public function handleEdit($id) {
// Predani ID.
$this->redirect('edituser');
}
Děkuji :-).
Editoval DavidSen (28. 4. 2013 19:32)
- Glottis
- Člen | 129
uplne stejne jako v handle. propadne to tam do volani akce
public function actionEdit($id) {
...
}
public function renderEdit($id) {
...
}
edit: a action predelas nejspis na
$grid->addAction('Edit', 'NejakyPresenter:edit', Html::el('span')->class('icon icon-edit'), $useAjax = TRUE);
Swiss napsal(a):
Šamane, jak by v tom pohledu ‚edit‘ mohl pracovat s předávaným $id? Jsem začátečník a řeším stejnou věc.
Editoval Glottis (29. 4. 2013 23:44)
- Šaman
- Člen | 2666
Předpokládáš správně. Ideální je, aby metoda dostala své závislosti
a parametry při volání metody a netahala si je sama.
Stejně tak bych nepoužíval v tomhle případě persistentní parametr –
ten se hodí třeba na udržování vnitřního stavu aplikace, tohle bych
řešil voláním fce s parametrem.
- Swiss
- Člen | 4
Když si tuhle diskuzi přečtu celou od začátku, jsem přesvědčen, že se jen neumím správně zeptat. Proto se to pokusím pečlivě vysvětlit znova.
- Na samém začátku je datagrid, ve kterém vytvořím tlačítko na úpravu
uživatele:
$grid->addAction('Edit','edituser'
- Takto nastavené mi tlačítko zobrazí pohled
edituser.latte
, který obsahuje řádek{widget editUserForm}
- Šablona vytvoří formulář voláním funkce
createComponentEditUserForm()
, která formulář mimo jiné naplní aktuálními daty uživatele, jehož bylo to tlačítko v datagridu. Jenže aby ta funkce mohla ten formulář naplnit, musí znátid
tohoto uživatele, aby si ho našla v databázi.
Znovu se tedy ptám: Jak mohu korektně zařídit, aby mi tlačítko
Edit
zobrazilo novou stránku s formulářem vyplněným
aktuálními daty uživatele, u kterého jsme stiskli toto tlačítko, když
tvrdíš, že jak použití /** @persistent */
ve funkci
handleEdit($id)
, tak použití
(int) $this->getParameter('id')
ve funkci
createComponentEditUserForm()
je špatně?
- Šaman
- Člen | 2666
Když v té ukázce v prvním příkladu nebude za edit
vykřičník, tak se zavolá nejprve actionEdit($id)
a následně
renderEdit($id)
na stávajícím presenteru. Pokud použiješ
třeba User:edit
, tak se zavolají tyto metody na UserPresenteru.
$id
jim v každém případě bude předáno jako paramatr,
nemusí si ho nikde hledat.
Tento parametr předáš do šablony a formulář vytvoříš
pomocí {control editUserForm $id}
Editoval Šaman (30. 4. 2013 2:42)