ugrás a tartalomhoz

MVC design kérdés

reagenross · 2011. Dec. 4. (V), 00.39
Sziasztok, nemrég kezdtem megismerkedni a Codeigniter keretrendszerrel. Eddig nagyon tetszik a rendszer, de az MVC minta még sok fejtörést okoz. Eddig mindenhol azt olvastam, hogy a viewba nem illik működési logikát írni. Pedig nekem most pont ez kellene. Egy login rendszert csinálok, belépés után sok különböző view kerülhet kiírtásra, annak függvényében, hogy a felhasználó milyen jogosultsággal rendelkezik.
Arra gondoltam, hogy a session ellenőrzést egy template view -ban valósítanám meg, hogy ne kelljen ugyanazt a session ellenörző kódot minden egyes controllerbe beilleszteni.

Mi a véleményetek erről a megoldásról?
 
1

Ne

Poetro · 2011. Dec. 4. (V), 03.20
Azt hogy ne. Elég egyetlen controllerbe belerakni. A többit meg legfeljebb abból kell származtatni. Persze nem ismerem a Codeigniter-t, de én így csinálnám.
2

Én már a modellből se

pp · 2011. Dec. 4. (V), 08.40
Én már a modellből se engednék olyan adatot kiszedni amihez a júzer nem jogosult.

pp
3

Van egy application/core

NiGGa · 2011. Dec. 4. (V), 10.10
Van egy application/core mappád, oda teszel, egy MY_Controllert, amiben ellenőrzől, eldöntöd melyik view kell, és azt rakod a template-be.
A "MY_"-t a configba beállítod.
Ezt kiterjeszted a többi controllerrel.
Amiket leírtál az NEM való egy view-ba!
4

hello, ha minden HTTP

Crystal · 2011. Dec. 4. (V), 18.15
hello,

ha minden HTTP kérésnél szükséged van erre az ellenőrzésre, akkor CodeIgniter esetén valószínűleg a pre_controller hook-ban lenne érdemes implementálnod. A nézetbe ne rakd, mint azt már fentebb kifejtették. Tényleg ne :)
5

Ha pedig egyik megoldás sem

prom3theus · 2011. Dec. 4. (V), 18.45
Ha pedig egyik megoldás sem szimpatikus, gyűjtsd egy csokorba ezeket a szűréseket és tedd egy Util vagy Helper osztályba, így bárhol szükség van a szűrésekre, egyetlen osztály 1-2 metódusának meghívásával meg tudod oldani anélkül, hogy "kopipésztelnél".
6

Köszönöm a válaszokat, sok jó

reagenross · 2011. Dec. 4. (V), 19.43
Köszönöm a válaszokat, sok jó ötlet érkezett, de még nem tudok mit kezdeni velük, nem ismerem annyira a rendszert hogy ezeket megvalósítsam. Talán pár hét tanulás után már lesz valami fogalmam az általatok említett megoldások kivitelezésének mikéntjéről.

De ha már itt tartunk, miért ennyire ellenjavalt a view ban megvalósítani az ellenőrzést? Elvégre csak pár sor kód lenne az egész....
7

Nem arra való

Poetro · 2011. Dec. 4. (V), 21.58
Ahogy view-ban nem csinálsz adatbázis lekérdezést sem, nem csinálsz semmilyen más üzleti logikát sem. Ha nem tetszik, nem kell használni az MVC-t, csak akkor ne mondd, hogy abban fejlesztesz. Az MVC-t azért hívják annak ami, mert van ugye a 3 komponense, amiknek elég jól meghatározott feladata van. Ha ezeket nem akarod betartani, akkor érdemes talán mást használni, ami rugalmasabb, és jobban lefedi a te igényeidet.
8

mert a view megjelenítésre való, nem authorizációra

Crystal · 2011. Dec. 5. (H), 13.41
Persze, hogy csak pár sor, de ha ezt most megengeded magadnak, akkor legközelebb meg fogsz engedni még egy pár sort, aztán még egy pár sort, és a végén már ugyanúgy spagetti lesz a kódod, mintha nem használnál keretrendszert (persze lehet írni szép kódot framework nélkül is, de az eredeti kérdés alapján szerintem többek közt/első sorban tanulási célból csinálod ezt a projektet)
9

A megoldás

reagenross · 2011. Dec. 7. (Sze), 00.36
Megtaláltam a megoldást, közzéteszem, hátha valaki okul belőle a jövőben.

http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
10

Jaja, ez is jó megoldás. Csak

Crystal · 2011. Dec. 7. (Sze), 17.00
Jaja, ez is jó megoldás. Csak egy hangyaf@sznyi problémám van vele: ez a MY_Controller dolog nagyon codeigniter-specifikus, szerintem nem is jó, hogy ilyen "hacky" megoldás van a classloaderben.

Ami a lényeg, hogy kb minden frameworkben működni fog az a megoldás, hogy minden controllert egy közös - általad írt - ősosztályból származtatod, és ennek egy alkalmas metódusában csinálod meg azokat a dolgokat, amiket minden requestnél meg kell csinálni. Ez az alkalmas metódus codeigniterben láthatóan a konstruktor, de más rendszerekben gyakran van "dedikált" metódus az ilyesmihez.