Existuje event po volaní action?

sucho
Člen | 57
+
0
-

Zdravím @DavidGrudl chcem sa opýtať či existuje nejaký Event po volaní action
niečo ako je onStartup()

Chcem dosiahnuť to aby som vedel vložiť componenty len pre určitú action
Ručne sa to samozrejme dá cez $this->addComponent()
ale chcem tie componenty registrovať cez config.neon aby sa načítali len tam kde majú
v startup() je to skoro lebo veci ako $entity atď. sa vytvoria až v action
v beforeRender() už je to neskoro lebo componenta nieje attachnutá k presentru kvôli volaniu napr. handle

Pridávať event na koniec každej action sa mi tiež nezdá najlepšie riešenie
Nenašiel som taký event ani v https://contributte.org/…r-extra.html#…

Najlepšie miesto by bolo asi tu niekde https://github.com/…resenter.php#L197

CZechBoY
Člen | 3601
+
0
-

Co si udělat BasePresenter, tam překrýt metodu createComponent a vrátit komponentu dle potřeby? Nakonfirugovat si ten BasePresenter můžeš jak chceš – např. předat službu, která bude řešit ono vytváření komponent podle konfigurace.

sucho
Člen | 57
+
0
-

Globálna createComponentPage() mala byť až ďalšie štádium
keď dokončím builder ktorý bude rozmiestnenie komponent ukládať do DB

no zatiaľ to mám len cez config a medzi komponentami sú aj statické texty alebo elementy
preto vytvoriť takú componentu by nebolo naj

ale asi to tak urobím s tým že nastavím si template file aký potrebujem

no chcel som vedieť či taký event neexistuje alebo či je to možné riešiť inak

Martk
Člen | 581
+
0
-

Ano, existuje event onStartup

sucho
Člen | 57
+
0
-

Martk napsal(a):

Ano, existuje event onStartup

Lenže on sa vykoná ešte pred action a skôr by som privítal afterAction

Václav Pávek
Backer | 84
+
0
-

Event afterAction by se hodil, ale co ti brání si napsat vlastní implementaci metody tryCall?

Martk
Člen | 581
+
+4
-

Jak píše @VáclavPávek, můžeš jako workaround udělat toto:

protected function tryCall(string $method, array $params): bool {
	$isAction = $this->formatActionMethod($this->getAction()) === $method;
	if ($isAction) {
		// beforeAction
	}
	$return = parent::tryCall(string $method, array $params);
	if ($isAction) {
		// afterAction
	}

	return $return;
}
sucho
Člen | 57
+
0
-

No to by šlo
už som chcel vyskúšať prepísať run() :D
https://github.com/…resenter.php#L175

ale tu toho bude menej https://github.com/…omponent.php#L82
len sa využíva aj pri render metódach takže to ošetriť
alebo doplniť before/after eventy aj pre rendre :D

Editoval sucho (27. 3. 2019 12:56)

CZechBoY
Člen | 3601
+
0
-

beforeRender a afterRender metody by měly už existovat

sucho
Člen | 57
+
0
-

CZechBoY napsal(a):

beforeRender a afterRender metody by měly už existovat

vlastne áno :D