Přesunout metody do presenteru nebo do komponenty?

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

Ahoj, řekněme, že mám tabulku s daty, které mohu hodnotit (like, dislike). Na výpis těchto dat jsem si vytvořil komponentu. Nicméně, co se týče akcí jako jsou like/dislike, tak nevím kam přesunout zodpovědnost.

Měl bych mít v presenteru metody actionLike a actionDislike, který by prováděly danou operaci a komponenta se starala pouze o vykreslování nebo tyto metody přesunout do komponenty a dát jim jméno handleLike a handleDislike?

V přípdadě, že bych je přesunul do komponenty, trápilo by mě, že bych nemohl použít jiné adresy pro redirect nebo pro výpis hlášek (flashMessage).

V případě formulářu je pěkné, že mohu v komponentě vyvolat callback a změnit tak adresy pro redirect nebo hlášku.

Dá se toho taky nějak dosáhnout nebo jak dosáhnout toho, aby komponenta byla zcela znovuvyužitelná?

Děkuji za rady.

Editoval Facedown (11. 6. 2015 18:05)

David Matějka
Moderator | 6445
+
+6
-
  1. i pokud by to bylo v presenteru, tak se na to vice hodi signal (tedy handle* metody)
  2. ale lepsi to bude mit primo v komponente, presmerovani a flash message vyresis vlastnim eventem
class FooComponent extends UI\Control
{
	public $onLike = [];

	public function handleLike($id)
	{
		//...
		$this->onLike($this, $id);
	}

}

a v presenteru jen

protected fucntion createComponentFoo()
{
	$control = $this->fooComponentFactory->create();
	$control->onLike[] = function ($control, $id) {
		$this->flashMessage(..);
		$this->redirect(...);
	}
	return $control;
}
Facedown
Člen | 38
+
0
-

@DavidMatějka To vypadá super, díky.