Mit üzen a ->forward()

A greeboval való játszadozásom közben felvetődött benne, hogy hogyan tudnék implementálni valamiféle forward funkciót a controllerben. Hát erre jutottam:

Először is nézzük meg mi is az a forward? A keretrendszerek általában megvalósítanak, olyan funkciót a controllerben vagy actionben, amely lehetővé teszi, hogy menet közben átváltsunk egy másik actionre és azt hajtsuk végre. Egész értelmes funkciónak tűnik. Hogy mi a gond vele?

Az a gond vele, hogy inkább intő jel számodra, mint értelmes funkció. Hiszen mit is csinálok valójában? Ráirányítok egy URLt egy actionre aztán félúton meggondolom magam. Ez két dolgot jelenthet:

1. egy actiont arra használok, hogy különböző funkciókat egy URLről szolgálok ki. Mit jelent ez: a) általában megoldható forward nélkül is, b) biztos egy URL alatt kell lennie ennek?, c) ha más nincs, akkor le kell tolni a modelbe és polimorfizmussal megoldható a probléma.

2. csinálok valamit egy actionben és után még meg kell tenni valamit. Ez is bűzlik. Dolgozd ki a model logikát rendesen és hívd meg a megfelelő függvényeket.

Mindemellett egy “ciklust” is indít a forward, hiszen általában úgy oldják meg, hogy újra kezdődik a dispatch folyamat az új controller-action párossal. Ám mivel ez egy ciklus, és nem akarunk végtelen ciklusba kerülni, meg kell neki adni valamilyen kilépő feltételt. De mi legyen az? Magyarul hány darab forward-ot engedjünk meg egy requestben? 2-t? 5-öt? 10-et? 100-at? Nincs jó megoldás, csak önkényes. A symfony ezt a számot 5-ben állapította meg; hogy miért ennyi nem tudod (szerintem ők sem).

Javaslom, hogy legközelebb, ha a forward-ot akarod használni, állj meg egy pillanatra és gondold végig, hogy tényleg erre van-e szükséged, tényleg jól oldottad meg a feladatot. Ha a forward jutott eszedbe hirtelen, akkor biztosan van jó megoldás is🙂

Kategória: fejlesztés
Címke: , ,
Közvetlen link a könyvjelzőhöz.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s