Diskuze: MVC - Wrappování common fukncí
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj, implementace vzoru MVC se dá udělat na hodně způsobů. Bylo by možné nějak nastínit, jak vypadají tvé controllery?
Když to tak čtu nemělo by spíše těch 5 kontrolerů dědit z CommonControlleru a ne naopak?
Jasně, snad se to trochu osvětlí.
Moje implementace je následující:
Kontroler
- SmerovacKontroler extends Kontroler
- ClankyKontroler extends Kontroler
- KontaktKontroler extends Kontroler
- HlavniStrankaKontroler extends Kontroler
Kontroler definuje abstract metodu 'zpracuj', kterou child kontrolery implementují. Právě v té metodě 'zpracuj' mám uvnitř jednotlivých kontrolerů logiku, která je ve všech kontrolerech stejná - dle id dotáhne data a nasetuje proměnné do view:
$this->data['titulek'] = $dotahniLabel['title'];
$this->data['obsah'] = $dotahniLabel['text'];
Je to srozumitelnější? To zawrapování se mi moc nechce dělat tak, že si vytvoří php soubor a tam tu logiku hodím a pak dám jenom
include()
. Radši bych to řešil nějak objektově v rámci MVC, ale zatím mě nenapadlo jak.
Doplněno. Snad to trochu osvětlí záměr.
Je v něčem problém udělat si nějaký BaseController, který bude dědit od Kontroler, a všechny ty další controllery od toho Base? Zřejmě je to řešené pomocí místního tutoriálu, u kterého nevím, jak přesně vypadá, ale nešlo by udělat do toho controlleru nějakou funkci, která se zavolá?
Něco jako
class BaseController extends Controller
{
public function zpracuj()
{
$this->data['titulek'] = $dotahniLabel['title'];
$this->data['obsah'] = $dotahniLabel['text'];
}
}
class ContactController extends BaseController
{
public function zpracuj()
{
parent::zpracuj();
// naplnění šablony dalšími daty
}
}
Ještě mě napadlo - nešlo by použít Traits?
S traity bych byl hodně opatrný. Z hlavy neznám přesnou definici, proč byly do jazyka přidány, ale dají se využít i špatným způsobem, i když se to zdá jako super nápad. Technicky by to určitě použít šlo, intuitivně si myslím, že to není zrovna správný případ využití
Pokud to použiješ rozumně, lze pomocí trait a interface dosáhnout jakési vícenásobné dědičnosti
To máš pravdu, jen je s tím potřeba opatrně, protože použití traits lehce svádí k tomu, že si "inlcuduji" do tříd různé funkcionality a není to logicky správně U lidí, kteří s OOP nemají delší zkušenosti, bych se toho trochu bál. Kombinace s interfaces mě ale popravdě nenapadla, s těmi by to mohlo být o něco lepší. Díky za tip.
Zobrazeno 11 zpráv z 11.