struktura a sdileni kodu komponenty

martin28
Člen | 39
+
0
-

Ahoj, jsem zacatecnik a dlouhou dobu bojuji jak nejlepe vyresit pouzivani componetny na vice mistech.

Mam App\Module\Admin a App\Module\Front udelal jsem komponentu (nevim zda uplne dobre) a chtel jsem ten blok formularu (komponenta sestavena ze tri form a urcitou funcknosti pres ajax, ruzne doplnovani atd.)

U sablon asi neni problem to me sdilet jde, pres createComponenta kde nastavim tu zvolenou komponentu, ale problem je v presenterech. Samozrejme mam dva jeden v adminu a frontendu…potrebuji hlidat ruzne handlery, rendery a veci pro tu komponentu. Moc se me nelibi ze stejny kod mam na dvou mistech. Jak se toto resi? Napsat to pomoci dedicnosti moc nejde protoze jiz dedeni maji a spolecneho predka take ale tam by se pak spojovalo zabezpeceny admin s front:-(

Dik Martin

Phalanx
Člen | 310
+
0
-

V presenteru vytváříš danou komponentu, takže jí tam předáš parametry.

<?php

// ... interface
// control
class AbcControl {
	private bool $isAdmin = false;
	// getter + setter

	// ...
	// if ($this->getIsAdmin()) { $form->addText('popis_admina', 'Popis admina'); }
}

AdminPresenter {
	public function createComponentAbc() {
		$control = $this->abcFactory->create();
		$control->setIsAdmin(true); // nastavím parametry
		// ... další parametry
		return $control;
	}
}


PublicPresenter {
	public function createComponentAbc() {
		$control = $this->abcFactory->create();
		$control->setIsAdmin(false);
		// ...
		return $control;
	}
}
?>

Případně sem přidej kód a odladíme to.

Editoval Phalanx (8. 6. 2020 9:58)

martin28
Člen | 39
+
0
-

ok super to jsem pochopil a vypadá to super. a jak prosim na ruzne ty handlery a render

v adminuPresenteru mam

public function actionNova($id) {
if ($id == 2) $this->dopravci->checkDopravci($this->sessionObjednavka);
....
}
public function handleSearchMesto($term, $psc, $stat)
{
       $this->sendJson($this->adresy->getMesto($term, $psc, $stat)->fetchAll());
}

a dalsi handlery a action…

toto samorejme musi byt i v tom PublicPresenteru???

CZechBoY
Člen | 3608
+
+2
-

Muzes mit handle primo v komponente.

martin28
Člen | 39
+
0
-

A jak provedu to volani? nejak preci musim propojit handle v komponente s tim spravnym v presenteru? ale to je prave to ze pak stejne musim mit ten vychozi handle v kazdem presenteru a volat ten handle z komponenty???

CZechBoY
Člen | 3608
+
0
-

V komponente se ted nejspis nejakym zpusobem odkazujes na akci/handle presenteru – toto bys zmenil na odkaz na handle v komponente.

martin28
Člen | 39
+
0
-

ne tak to nemam, prave toto moc nechapu to propojeni…

Abychom se posunuli, tak konkretni pripad.

Mam komponentu kde mam mimojine input mesto…

Pak v konkretnim presenteru naseptavam mesta z db, to vubec nemam reseno v te komponente, ale klasicky pres ajax… toto pak mam v kazdem presenteru co to chci naseptravat. To je jedna vec ale pak take treba plneni promenych sablon atd

public function handleSearchMesto($term, $psc, $stat)
{
       $this->sendJson($this->adresy->getMesto($term, $psc, $stat)->fetchAll());
}
CZechBoY
Člen | 3608
+
0
-

Tak tohle bys treba mohl resit pres povinny parametr v tovarne na komponentu – proste nejaky callable na hledani/naseptani mesta (pokud se ty implementace lisi, jestli ne tak bych to mel jen v komponente).

martin28
Člen | 39
+
0
-

muzes prosim poslat ukazku jak to myslis?

Kamil Valenta
Člen | 762
+
+1
-

Pokud komponenta vykresluje form, tak by s sebou měla tahat i ajax handly. Neměla by být závislá na něčem z venku (v presenteru), protože si nemůže být jistá, že to v daném presenteru skutečně bude existovat…