Rozlišení přesměrování na základě parametru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomikuk
Člen | 10
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Nastuduj si jak funguje backlink, Application::storeRequest() a Application::restoreRequest() https://github.com/…D-collection

Tomikuk
Člen | 10
+
0
-

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)

Tomikuk
Člen | 10
+
0
-

Opravdu nikdo netuší jak uložit request, ať už pomocí storeRequest či jinak, bez toho aniž bych musel přesměrovávat?