Změna action ve formuláři via Ajax
- autumnLeaf
- Člen | 2
Zdravím,
určitě půjde o lehce řešitelný problém, ale marně si s ním lámu
hlavu.
Na stránce s uživatelem mám výpis skupin, jíž je uživatel součástí,
včetně odkazu, který uživatele ze skupiny odmaže.
Pod touto tabulkou mám formulář se select boxem, který naopak umožňuje
uživatele přidat do těch skupin, ve kterých ještě není.
Vše obsluhuji skrze AJAX takovým způsobem, že pokud odmažu skupinu uživateli, ajaxem se překreslí jeho aktuální skupiny, a také formulář do kterých ho mohu přidat ( tedy v selectboxu přibyde ta skupina, z níž jsem ho právě odmazal ), to samé i naopak.
Problém mám s tím, že když uživatele odmažu ze skupiny ajaxem (
zavolá se např. /user/discard/?idUser=5&idGroup=x ) a nechám si vrátít
obnovený formulář, změní se mi prefix v action formuláře.
Tedy pokud tam bylo např. action="user/edit/5?doSomething…
změní se hodnota na /user/discard/?idUser=5&idGroup=5?doSomething
což sebou nese problém s odesláním formuláře, který v Presenteru
projde action metodou discard, což působí neplechu.
Díky za nakopnutí.
- autumnLeaf
- Člen | 2
voda napsal(a):
Udělej odstranění skupiny signálem:
public function handleDiscard($user, $group) { $this->model... if ($this->isAjax()) { $this->validateControl(..); } else { $this->redirect('this'); } }
a odkaz z šablony bude
<a n:href="!discard ...">..</a>
Jop, to je ono. Díky moc ;)
- tomask
- Člen | 9
Mám podobný problém.
Situace: jednoduchý admin s přehledem záznamů a paginátorem umístěným ve snippetu ‚list‘. Ve společné metodě beforeRender mám:
public function beforeRender()
{
if ($this->isAjax()) {
$this->invalidateControl('flashes');
$this->invalidateControl('list');
}
}
Po přechodu na editaci záznamu vykreslím formulář pomocí továrničky. Formulář je opět odeslán ajaxem a zpracovává ho připravený callback přidaný jako
$form->onSuccess[] = callback($this, 'productEditFormSubmitted');
Callback aktualizuje model, nastaví hlášku. Změní view na default. Invalidují se potřebné snippety (beforeRender), vypíše se správně hláška a aktualizovaný seznam. Problém je, že odkazy v paginatoru se negenerují pro view ‚default‘, ale pro ‚edit‘. Proč komponenta VisualPaginator generuje odkazy pro jiný view? Jak jí sdělím, že už jsem v jiném view? Děkuji za popostrčení.
public function productEditFormSubmitted(Form $form)
{
if ($form->isSubmitted()) {
try {
$update = $this->model->update($this->getParam('id'), $form->values);
$this->flashMessage('Update ok');
$this->setView('default');
} catch (\Exception $e) {
$this->flashMessage('Chyba: ' . $e->getMessage(), 'error');
}
if (!$this->isAjax()) {
$this->redirect('Presenter:default');
}
}
}