Rozlišení přesměrování na základě parametru
- Tomikuk
- Člen | 10
Mám presenter Parent a Child. V presenteru Parent mám DataGrid jehož položky mají akci, která je akcí presenteru Child.
Kód je následující:
final class ParentPresenter {
...
protected function createComponentChildGrid($name) {
$grid = new DataGrid($this, $name);
...
$grid->addAction('Edit', 'Child:edit', ...);
...
}
}
Problém je, že co jsem se tak díval do kódu DataGridu, tak nelze předávat nějaký parametr navíc. Potřeboval bych však presenteru Child předat id rodiče, protože dle něho se rozhodne kam se po editaci přesměrovat zpět. Kód je následující:
final class ChildPresenter {
...
$parentId = $this->getParam('parent_id');
// bylo presmerovano z editace rodice
if ($parentId) {
if(!$this->isAjax()) {
$this->redirect('Parent:edit', $parentId);
} else {
$this->forward('Parent:edit', $parentId);
}
} else {
// bylo presmerovano z vypisu potomku
if(!$this->isAjax()) {
$this->redirect('default');
} else {
$this->forward('default');
}
}
...
}
Nějaký nápad jak to zrealizovat? Díky.
- Filip Procházka
- Moderator | 4668
Pokud budou mít oba presentery stejného předka, který bude mít persistentní parametr, který chceš přenášet, tak datagrid nedatagrid se to přenese.
- Tomikuk
- Člen | 10
Mám problém v tom, že někdy si ten persistentní parametr nepřeji přenášet, nebo alespoň ho nemít nastavený.
Například, když si v Child presenteru vypisuju všechny potomky, tak odkazy v DataGridu potom vypadají nějak takhle: domena?id=1&parentId=1&action=edit&presenter=Child, což ovšem nechci, protože dle nastavení/nenastavení parentId rozpoznávám kam se přesměruju zpět.
- Filip Procházka
- Moderator | 4668
Nastuduj si jak funguje backlink
,
Application::storeRequest()
a
Application::restoreRequest()
https://github.com/…D-collection
- Tomikuk
- Člen | 10
Dík. Tak jsem to zkusil, ale to mi taky nepomůže :-(. Použil jsem to takhle:
final class ParentPresenter {
...
public function actionEdit($id = 0) {
...
$this->backlink = $this->application->storeRequest();
}
...
}
Ale po storeRequest() je třeba provést přesměrování, což nechci, protože potřebuju zůstat v editaci. Když nepřesměruju, tak se dočkám hlášky „Smyčka při přesměrování“.
Editoval Tomikuk (13. 5. 2011 18:47)