Kezdőoldal » Számítástechnika » Weblapkészítés » MVC segítség? Valaki segítene...

MVC segítség? Valaki segítene elmagyarázni egypár dolgot?

Figyelt kérdés

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:

[link]


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?



2015. okt. 26. 00:03
 1/2 Drone007 ***** válasza:

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"

2015. okt. 26. 06:47
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:
100%

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.

2015. okt. 27. 08:50
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!