MVC segítség? Valaki segítene elmagyarázni egypár dolgot?
Ugye általában egy oldalon 'történik minden', most jelenesetben az index.php-n. Htaccessben beállítjuk, hogy az index.php-ra történjen az összes url művelet, és itt hívódnak meg az url-nek megfelelően a műveletek. Például ha az az url, hogy www.example.com/blog/az-elso-blog
akkor ugye egy blogot, méghozzá az első blog című blogot kell megjeleníteni. De ha az lenne az url hogy www.example.com/bejelentkezes akkor ugye be kell hívni a bejelentkezes templatet, a bejelentkezés formot.
Szóval az index.php leellenőrizzük az URL-t és az url-ből meg kikövetkeztetjük a műveletet?
Például:
//URL jelenesetben www.example.com/blog/az-elso-blog
$url = explode("/",$_SERVER["REQUEST_URI"]);
Megy a kérés a blogController-nek, átadjuk neki az URL-t tömbben. Jelenesetben a tömb 1.eleme ugye a blog lesz, a 2. "az-elso-blog".
A blogController pedig kérést nyújt a modellnek. A modell lekérdezi az adatbázisból "az-elso-blog" című blognak az adatait és visszaküldi a controllernek.A controller elküldi ezt a view-nek. A view pedig egy html kód, a php-vel itt csak kiírjuk az adatokat. A controller visszakapja a megkapott html kódot (output buffering) és ezt vissza az indexnek, az index.php bedig egy echo-val megjeleníti a kimenetet.
Valahogy megpróbáltam lerajzolni:
Nos, ezek alapján az mvc-ben hogyan történik pl. egy form ellenőrzése? Vagy a form adatainak az adatbázisba írás? Vagy egy komplett regisztráció? Vagy a bejelentkezés? És hogyan lehet sessionokat indítani (ezt főleg bejelentkezés alatt értem). És ha pl. állandó fejlécet akarok, akkor nem kell minden template-hez külön megírni a fejlécet, hanem elég ha berakom az index.php-ba?
Egyébként valaki segítene megoldani azt a problémát, hogy van ez a htaccess kód:
RewriteEngine On
RewriteRule . index.php [L]
-Ez ugye minden kérést az index.php-nak ad át, viszont így nem tudom elérni a css vagy js fájlokat. Hogyan oldjam ezt meg?
Az MVC elég tömény téma, a maga teljességében biztosan nem fogom kifejteni. De a lényeg: Abban igazad van, hogy az url-ből állapítja meg a rendszer, hogy milyen műveleteket kell tennie.
Először is megállapítja milyen kontroller és milyen hozzá tartozó akció süljön el. Minden oldalhoz el kell tárolnod - vagy adatbázisban, vagy - az alap tutorialoknál - beégetve az inicializációs részbe, hogy milyen kontrollert és akciót hívjon meg. Ezután betölti a rendszer a kontroller osztályt, ami a továbbiakban kapott paraméterekből (példádban a "az-elso-blog") meghatározza az akció típusát.
Majd betölti a rendszer a kontrollerhez tartozó modell osztályt (ha van).
A kontroller a kapott paraméterek alapján ($_GET, $_POST, $_REQUEST...)dönt az akciók felől amik lényegében a modell osztályt hívják adatkinyerés, módosítás törlés szempontjából.
Ha a paraméterek alapján szükséges műveletek végre lettek hajtva, a rendszer betölti a layoutot (view réteg), ami megjeleníti az előállított adatokat.
Bármilyen űrlap küldés ezen az elven zajlik le.
A munkamenet változók (session) használata az mvc struktúrától független, nagyon alap dolog. Ennek a php.net-en járj utána, mert enélkül maximum a "hello world!"-öt tudod megírni php-ben.
Az index.php csupán egy kapu, ami elindítja a vezérlést, összefogja a különböző requesteket, a template-ek pedig a view réteg részét képezik. Kérdésed alapján felmerül bennem, hogy miért is próbálsz mvc-ben próbálkozni, amikor az alap php fejlesztést is csak felületesen érted.
.htaccess-t próbáld így:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?p=$1 [QSA,L]
</IfModule>
Ez egy $_GET["p"] változóba tömörít minden az urlben szereplő request_uri-t és az index.php-ban hívja meg.
Ebből: www.example.com/blog/az-elso-blog
A szerveren ez lesz:
www.example.com/index.php?p=blog/az-elso-blog
vagyis $_GET["p"] = "blog/az-elso-blog"
Nem olvastam el az #1 válaszoló válaszát, szóval lehet, hogy lesznek olyan dolgok, hogy ugyanazt írtam le, vagy teljesen más megközelítésből.
Én inkább nem PHP módon hanem absztrakt módon fogom tárgyalni az MVC-t, persze PHP-ra utalva.
Jelen esetben a program belépési pont maga az index.php első sora. (Míg más C/C++/Java esetén maga a main függvény.) MVC modellt megelőzi az úgy nevezett előkészítő, ami értelmezi az URL-t, beérkező olyan adatokat, amikről fel kell fedezni micsoda, hogy egyáltalán tudjuk mely Controllert kell futtatnunk.
Én ezt egyszerűen Core-nak szoktam hívni a programjaimban.
Én megoldásom:
Core meghívja a megfelelő Controllert és a hozzá tartozó View-t. (Én View-hoz Twig-et vagy Smarty framework-t használok)
Controller levezényli az üzleti logikát és generál egy output-ot amit a Core átvesz, és átadja a View-nak. Innentől Controller és a Model már nem kell, mivel minden megjelenítésre váró adat elkészült.
Így a kérdésre válaszolva, hogy regisztrációt hogyan:
Csinálsz egy olyan Controller-t. Ennyi. Ha speciális, pl. nem akarsz View-t külön neki, hanem csak legyen belépve, akkor
a) headler függvényt alkalmazod.
b) vagy generáltatsz egy Excepsion-t amivel visszatéríted a futást a Core-ba majd visszairányítod az alap Controllerre
c) vagy egy olyan modult, ami figyeli az URL-t és Form-ot, ha megfelelőek akkor még Crontroller előtt loginoljon
d) vagy amit kitalálsz rá végtelen+1 megoldás van rá, de mindenki mást vall. (ezért is lesznek kötözködők, mert mindenki a saját megoldásában hisz)
MVC csak egy módszer. Rengeteg megtestesítője van. Ahány ember/csapat, annyi féle megvalósítás kb.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!