struktura a sdileni kodu komponenty
- martin28
- Člen | 40
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
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 | 40
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???
- martin28
- Člen | 40
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());
}
- Kamil Valenta
- Člen | 822
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…