MVC
Moderatori: coditza, Emil, Moderatori
-
serbanalexandru94
- PHPRomania Supporter
- Mesaje: 11
- Membru din: Vin Iul 25, 2014 12:34 pm
MVC
Salut,am inceput recent sa studiez MVC pentru ca doresc sa il inteleg si folosesc fara un framework pentru a imi fi mai usor cand trec pe un framework.Consider ca am inteles destul de bine conceptul,ce fac modelul,view-ul si controllerul si cum sunt concepute insa am o singura intrebare.Din cate am inteles eu pana acum Controller este o clasa in care sunt diverse metode pentru fiecare actiune din view,iar view-ul este o clasa ce preia un template ii seteaza datele si il afiseaza.Controller-ul este cel care instantieaza un obiect de tip model,un obiect de tip view trimite sau cere date folosind metode ale obiectului model si apoi seteaza datele in template prin metode ale obiectului de tip view urmand sa afiseze template-ul prin metoda obiectului view si bineinteles in functie de metoda controllerului se folosesc modelul si view-ul necesare pentru ca controllerul decide ce model si view sa foloseasca.Toate bune si frumoase pana aici,dar o singura dilema am daca paginile afisate nu sunt nici mai mult nici mai putin decat un template,ele pot contine si un form sau link nu?pentru fiecare actiune dorita si sa spunem ca avem o pagina de useri si fiecare este un link catre o pagina ce arata informatii despre el.Cum facem ca atunci cand apasam pe numele userului sa chemam o metoda ShowUser de exemplu a unui obiect de tip controllerUser sa zicem care preia id-ul userului dat prin get,face verificari daca este ok si cere date despre el de la model si seteaza datele prin obiectul de tip Userview sa zicem si apoi apeleaza metoda show()?Si exemplele sunt multe putem avea un login,un add user,un buton pentru a sterge un user si asa mai departe,intrebarea mea la modul general este cum chemam o metoda a unui obiect de tip controller la efectuarea unei actiuni in pagina html?O idee ar fi sa facem o pagina intre view->controller care se ocupa cu instantierea controllerului si apelarea metodei necesare trimitand $_GET sau $_POST ca parametru dar atunci ce reprezinta aceasta pagina in MVC ca nu am dat niciunde de ea.
- Birkoff
- Senior Member
- Mesaje: 6380
- Membru din: Joi Mar 18, 2004 2:34 pm
- Localitate: Bucuresti
- Contact:
Re: MVC
m-ai ametit cu explicatia ta, a trebuit sa o citesc de 3 ori ca sa inteleg ce vrei (mai ales ca ai ingramadit tot textul si pierdeam siru)
mvc e un concept, o metoda de lucru, un design pattern, nu are legatura cu clase/metode sau limbaj de programare (depinde de fiecare cum il implementeaza in proiectul lui)
pe scurt:
1) controlerul e acea parte de cod care in urma unei actiuni externe comanda si controleaza un flux de date pana la finalizarea algoritmului.
controlerul nu e obligatoriu sa fie o clasa, poate sa fie si un set de instructiuni, un try-catch/switch sau chiar instructiuni procedurale.
2) model este acea parte din cod care se ocupa strict cu lucrul cu baza de date (indiferent ce tip de bd este) si este apelat de controler cand este nevoie de date din/in baza de date (la fel, nu este obligatoriu sa fie o clasa)
3) viewer este acea parte din cod care se ocupa cu prepararea datelor pentru afisarea pe un dispozitiv si afisarea lor (sau trimiterea lor la template engine). In functie de dispozitiv, viewerul poate trimite anumite date pentru de exemplu tableta si alte date pentru desktop sau alte date pentru un API. De asemenea este apelat din controler cand este nevoie.
pe langa astea 3, mai exista care se ocupa de obicei cu verificarea datelor primite si router-ul care decide ce actiune/controler apeleaza intr-o anumita situatie.
ar mai fi si template engine-ul si altele, dar doar lucrand practic in viata de zi cu zii iti dai seama ce si cum.
template-engine-ul se ocupa ca datele primite sa le puna intr-o forma citibila si inteleasa de catre dispozitivul caruia ii sunt destinate (deci el deja primeste datele gata pregatite, doar le aranjeaza pentru dispozitiv, ca e dispozitiv pentru om (mobil/tableta/desktop) sau bot (api) asta el stie)
ce intrebi tu e legat de partea de rutare a datelor care este inainte de controler.
Un sfat de la mine, daca e sa o apuci pe drumul asta "keep it simple" nu te complica cu clase peste clase si metode peste metode pentru ca la un moment dat le pierzi sirul si poate ca nu ai nevoie de toate pentru un proiect mic.
PS vezi ca mai exista multe discutii pe tema asta in forum, cauta dupa design pattern si vezi discutiile.
mvc e un concept, o metoda de lucru, un design pattern, nu are legatura cu clase/metode sau limbaj de programare (depinde de fiecare cum il implementeaza in proiectul lui)
pe scurt:
1) controlerul e acea parte de cod care in urma unei actiuni externe comanda si controleaza un flux de date pana la finalizarea algoritmului.
controlerul nu e obligatoriu sa fie o clasa, poate sa fie si un set de instructiuni, un try-catch/switch sau chiar instructiuni procedurale.
2) model este acea parte din cod care se ocupa strict cu lucrul cu baza de date (indiferent ce tip de bd este) si este apelat de controler cand este nevoie de date din/in baza de date (la fel, nu este obligatoriu sa fie o clasa)
3) viewer este acea parte din cod care se ocupa cu prepararea datelor pentru afisarea pe un dispozitiv si afisarea lor (sau trimiterea lor la template engine). In functie de dispozitiv, viewerul poate trimite anumite date pentru de exemplu tableta si alte date pentru desktop sau alte date pentru un API. De asemenea este apelat din controler cand este nevoie.
pe langa astea 3, mai exista care se ocupa de obicei cu verificarea datelor primite si router-ul care decide ce actiune/controler apeleaza intr-o anumita situatie.
ar mai fi si template engine-ul si altele, dar doar lucrand practic in viata de zi cu zii iti dai seama ce si cum.
template-engine-ul se ocupa ca datele primite sa le puna intr-o forma citibila si inteleasa de catre dispozitivul caruia ii sunt destinate (deci el deja primeste datele gata pregatite, doar le aranjeaza pentru dispozitiv, ca e dispozitiv pentru om (mobil/tableta/desktop) sau bot (api) asta el stie)
ce intrebi tu e legat de partea de rutare a datelor care este inainte de controler.
Un sfat de la mine, daca e sa o apuci pe drumul asta "keep it simple" nu te complica cu clase peste clase si metode peste metode pentru ca la un moment dat le pierzi sirul si poate ca nu ai nevoie de toate pentru un proiect mic.
PS vezi ca mai exista multe discutii pe tema asta in forum, cauta dupa design pattern si vezi discutiile.
1) )
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
-
serbanalexandru94
- PHPRomania Supporter
- Mesaje: 11
- Membru din: Vin Iul 25, 2014 12:34 pm
Re: MVC
Eu am inteles ca e un concept si ce face fiecare in parte la nivel de baza asa,stiu ca nu conteaza limbajul dar am dat un exemplu din situatia mea actuala pentru ca imi este mai simplu.De helper si router cei drept nu auzisem pe niciun site si probabil ca asta ma incurca ca incercam sa fac ceva sarind doi pasi .Stiu ca pot face controlerul si procedural asta a fost prima mea solutie pentru ca puteam sari peste helper si router si puneam la action="AddUserController" sa zicem si acolo faceam tot ce trebuie instantiam un obiect de tip user,verificam datele,apelam metoda AddUser etc si mergea ca uns doar ca peste tot pe net am gasit ca este mai indicat sa folosim o clasa pentru ca daca fac procedural o sa am un controoler per pagina/actiune si am inteles ca nu e foarte ok,plus ca daca as face metode intr-o clasa as putea refolosii metoda in mai multe locuri mai usor si am zis sa ma obisnuiesc asa cum trebuie daca tot o fac,nu conteaza ca acum lucrez la o aplicatie mai mica pentru ca ma pregatesc pentru a lucra la una foarte mare si stiu ca la nivel mai inalt si in aplicatiile mai complexe totul se face OOP din mai multe motive bine intemeiate,eu normal ca acum in propria mea aplicatia pot face lucrurile cum vreau eu doar sa iasa dar la final o sa fie o tocanita
) pentru ca asa a fost initial cand m-am apucat insa am facut usor trecerea la OOP pentru a ma obisnui sa il folosesc asa cum trebuie si sa il inteleg,si acum este totul OOP si as vrea sa ramana asa plus ca sunt sigur cum am zis ca asa se face si in aplicatiile mari si complexe si vreau sa fiu pregatit sa le inteleg cand voi intra in cod.O sa ma uit si pe site poate gasesc chestii care sa ma ajute,dar de asemenea te-as ruga daca ai ceva materiale despre acel helper si router mi-ar prinde foarte bine,pentru ca pana in momentul asta eu mi-am implementat propriul MVC ca sa zic asa in cateva nivele asa cum am inteles de pe net si observ ca sunt mult mai multe si propriul ca asa lucreaza si framework-ul.
-
serbanalexandru94
- PHPRomania Supporter
- Mesaje: 11
- Membru din: Vin Iul 25, 2014 12:34 pm
Re: MVC
Multumesc mult pentru raspunsuri,acum lucrurile devin umpic mai clare,era destul de greu sa imi imaginez cum o sa fac totul folosind doar model,controller si view.Deci ca si idee sa inteleg ca aplicatia in view o voi face in mod obisnuit ca si pana acum,pun link sau form sau ce header sau ce am eu nevoie unde am eu nevoie si acel fisier .htacces il redirectioneaza spre index.php si pune ca parametru prin get un url ce ii ofera toate informatiile despre actiunea ce trebuie luata.
Doar ca observ trebuie sa am grija ca orice url dat ca parametru sa respecte o anumita structura pe care eu o folosesc la parsare in index.php sau chiar pot adauga un alt fisier intre .htacces si index.php care sa se ocupa de parsare.
Deci ca si exemplu daca am o lista de useri si vreau informatii despre unul din ei nu o sa mai fac ca pana acum il trimit la ShowUser.php?id=2 de exemplu si ii trimit la user/user/show/2 ce inseamna ca doresc sa se apeleze functia show din controllerul user al modelului user pentru userul cu id 2 si in .htacces se preia acest url unde l-am trimis si se trimite prin get la index.php,pare destul de ok daca intr-adevar am inteles eu bine si daca aceasta este metoda folosita si la case mai mari
ca obiectivul meu este sa invat sa codez asemanator lucrului intr-o companie destul de serioasa pentru a fi pregatit dinainte si sa nu ma pierd prin codul lor sau sa am un stil ciudat,diferit de toata lumea
) .
Dar o intrebare practic acel index.php o sa contina toate posibilitatile de actiune de pe site sau facem un index.php per entitate gen unul pentru toate actiunile ce tin de user,altul pentru admin,altul pentru shop etc ?
De asemenea am gasit aici http://www.elvishsu66.com/2014/01/start ... s.htaccess o structurare foarte interesanta a mvc-ului daca vrei sa iti faci propriul tau framework si pare sa se aproprie destul de mult de ce spuneti voi.Sunt curios ce parere aveti,am observat ca acolo are o impartire si mai riguroasa bineinteles adauga si alte actiuni pe care eu nu le faceam inainte.De exemplu se pare ca el are doua fisiere .htacces,primul la care nu sunt foarte sigur ce face si redirectioneaza catre al doilea .htacces care se afla in folderul public arata de resurse ca si imagini,videouri,css sau scripturi si aici se ocupa de incarcarea resurselor probabil.
Abia acum il redirectioneaza catre index.php unde se pare ca porneste sesiunea si preia url,dupa care incarca un alt fisier pana la cel rout si in acest fisier face verificarea url-ului si vede daca existama macar un controller,model etc in acel url tot aici incarca clasele de care are nevoie sau fisiere de configurare si cum spuneai tu apeleaza cateva metode din clase helper care face anumite modificari asupra url-ului pentru a fi friendly si la final insfarsit instantieaza un obiect de rout caruia ii da ca parametru url si apeleaza o metoda care din ce am vazut eu face parsarea,preia controlorul,modelul si ce altceva mai exista,preia toti parametrii ii prelucreaza asa cum are nevoie de ei si la final de tot instantieaza controlerul respectiv.
Pare destul de frumos aranjat codul si are sens,doar ca acum la inceput pentru mine multe din chestiile de le face acolo sunt mai greu de urmarit,plus ca asa cum spunea si Birkoff inca nu ma lovesc de ele in aplicatia mea micuta,dar o sa incerc sa o structurez cat de asemanator se poate pentru a ma obisnui asa cum am zis,stiu ca nu poti aplica framework-ul altei persoane mereu si ca trebuie sa iei anumite decizii si sa il pliezi in functie de aplicatie dar macar fisierele generale in care se face impartirea traiectoriei ar trebuie sa le stiu si sa inteleg ca banuiesc ca de ele te cam lovesti mereu si in acelasi timp imi formez si o gandire structurala,un mod de a privi lucrurile si de a gandii o aplicatie inainte de a incepe sa lucrezi la ea lucruri care sigur pot fi aplicate in orice limbaj,aplicatie sau situatie.
De asemenea daca mai aveti alte precizari sau sfaturi legate de subiectul asta ,mi-ar face placere sa le aud.
Multumesc!
Doar ca observ trebuie sa am grija ca orice url dat ca parametru sa respecte o anumita structura pe care eu o folosesc la parsare in index.php sau chiar pot adauga un alt fisier intre .htacces si index.php care sa se ocupa de parsare.
Deci ca si exemplu daca am o lista de useri si vreau informatii despre unul din ei nu o sa mai fac ca pana acum il trimit la ShowUser.php?id=2 de exemplu si ii trimit la user/user/show/2 ce inseamna ca doresc sa se apeleze functia show din controllerul user al modelului user pentru userul cu id 2 si in .htacces se preia acest url unde l-am trimis si se trimite prin get la index.php,pare destul de ok daca intr-adevar am inteles eu bine si daca aceasta este metoda folosita si la case mai mari
Dar o intrebare practic acel index.php o sa contina toate posibilitatile de actiune de pe site sau facem un index.php per entitate gen unul pentru toate actiunile ce tin de user,altul pentru admin,altul pentru shop etc ?
De asemenea am gasit aici http://www.elvishsu66.com/2014/01/start ... s.htaccess o structurare foarte interesanta a mvc-ului daca vrei sa iti faci propriul tau framework si pare sa se aproprie destul de mult de ce spuneti voi.Sunt curios ce parere aveti,am observat ca acolo are o impartire si mai riguroasa bineinteles adauga si alte actiuni pe care eu nu le faceam inainte.De exemplu se pare ca el are doua fisiere .htacces,primul la care nu sunt foarte sigur ce face si redirectioneaza catre al doilea .htacces care se afla in folderul public arata de resurse ca si imagini,videouri,css sau scripturi si aici se ocupa de incarcarea resurselor probabil.
Abia acum il redirectioneaza catre index.php unde se pare ca porneste sesiunea si preia url,dupa care incarca un alt fisier pana la cel rout si in acest fisier face verificarea url-ului si vede daca existama macar un controller,model etc in acel url tot aici incarca clasele de care are nevoie sau fisiere de configurare si cum spuneai tu apeleaza cateva metode din clase helper care face anumite modificari asupra url-ului pentru a fi friendly si la final insfarsit instantieaza un obiect de rout caruia ii da ca parametru url si apeleaza o metoda care din ce am vazut eu face parsarea,preia controlorul,modelul si ce altceva mai exista,preia toti parametrii ii prelucreaza asa cum are nevoie de ei si la final de tot instantieaza controlerul respectiv.
Pare destul de frumos aranjat codul si are sens,doar ca acum la inceput pentru mine multe din chestiile de le face acolo sunt mai greu de urmarit,plus ca asa cum spunea si Birkoff inca nu ma lovesc de ele in aplicatia mea micuta,dar o sa incerc sa o structurez cat de asemanator se poate pentru a ma obisnui asa cum am zis,stiu ca nu poti aplica framework-ul altei persoane mereu si ca trebuie sa iei anumite decizii si sa il pliezi in functie de aplicatie dar macar fisierele generale in care se face impartirea traiectoriei ar trebuie sa le stiu si sa inteleg ca banuiesc ca de ele te cam lovesti mereu si in acelasi timp imi formez si o gandire structurala,un mod de a privi lucrurile si de a gandii o aplicatie inainte de a incepe sa lucrezi la ea lucruri care sigur pot fi aplicate in orice limbaj,aplicatie sau situatie.
De asemenea daca mai aveti alte precizari sau sfaturi legate de subiectul asta ,mi-ar face placere sa le aud.
Multumesc!
-
serbanalexandru94
- PHPRomania Supporter
- Mesaje: 11
- Membru din: Vin Iul 25, 2014 12:34 pm
Re: MVC
Mai am si eu o intrebare,nu reusesc deloc sa redirectionez toate request-urile catre index.php,am incercat zeci de variante gasite pe net.Am creat un fisier .htaccess in root,fisierul are extensia .conf,insa nu se intampla nimic incearca sa acceseze usser/show si spune ca nu recunoaste,nici nu ajunge la index.ce alternative as mai avea?
- Birkoff
- Senior Member
- Mesaje: 6380
- Membru din: Joi Mar 18, 2004 2:34 pm
- Localitate: Bucuresti
- Contact:
Re: MVC
nu stiu cum ai tu sistemul facut, dar iti explic sistemul meu poate intelegi ce trebuie sa faci la tine
1) cms-ul genereaza pagina html cu linkurile normale de forma index.php?variabila=valoare
2) inainte de a afisa pagina, fac preg_replace pe textul din pagina (sa zicem ca toata pagina cu tot codul html/css/js care urmeaza sa se afiseze este in variabila $html) si inlocuiesc linkurile dorite in ce forma vreau eu (sa zicem din index.php?cere=blog&pagina=about in link de forma /blog/about ).
3) dupa ce se face inlocuirea linkurilor din pagina se afiseaza pagina la vizitator (echo $html)
4) el da click pe unul din linkuri si atunci intra in functiune serverul apache prin fisierul htacces si verifica linkul
5) in fisierul htaccess specific ca linkul de forma /blog/about sa redirecteze catre index.php?cere=blog&pagina=about si el cand vede ca se cere linkul ala de fapt incarca index.php cu valorile respective - userul in url vede de fapt doar /blog/about nu vede ce se intampla in spate
citeste tutorialele de la mine legate de htaccess ca sa te lamuresti.
1) cms-ul genereaza pagina html cu linkurile normale de forma index.php?variabila=valoare
2) inainte de a afisa pagina, fac preg_replace pe textul din pagina (sa zicem ca toata pagina cu tot codul html/css/js care urmeaza sa se afiseze este in variabila $html) si inlocuiesc linkurile dorite in ce forma vreau eu (sa zicem din index.php?cere=blog&pagina=about in link de forma /blog/about ).
3) dupa ce se face inlocuirea linkurilor din pagina se afiseaza pagina la vizitator (echo $html)
4) el da click pe unul din linkuri si atunci intra in functiune serverul apache prin fisierul htacces si verifica linkul
5) in fisierul htaccess specific ca linkul de forma /blog/about sa redirecteze catre index.php?cere=blog&pagina=about si el cand vede ca se cere linkul ala de fapt incarca index.php cu valorile respective - userul in url vede de fapt doar /blog/about nu vede ce se intampla in spate
citeste tutorialele de la mine legate de htaccess ca sa te lamuresti.
1) )
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
-
serbanalexandru94
- PHPRomania Supporter
- Mesaje: 11
- Membru din: Vin Iul 25, 2014 12:34 pm
Re: MVC
Pai am inteles primele 4 puncte le fac si eu exact asa,doar ca eu in htaccess incercam sa trimit toate paginile in index.php unde faceam parsarea,tu spui ca specifici pentru fiecare url unde sa redirectezi pagina si cum mai exact faci asta?
Eu pentru a trimite toate fisierele in index.php am ceva de genul scris in fisierul .htaccess creat in root:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
Eu pentru a trimite toate fisierele in index.php am ceva de genul scris in fisierul .htaccess creat in root:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
-
serbanalexandru94
- PHPRomania Supporter
- Mesaje: 11
- Membru din: Vin Iul 25, 2014 12:34 pm
Re: MVC
Am reusit sa fac toata redirectionarea catre index.php prin .htaccess insa acum m-am lovit de alta problema,nu pot sa tansmit si datele catre index.php daca acestea au fost trimise prin POST.
Adica am un formular si la action="user/login" cu campurile username si password si vreau ca in .htaccess sa il retrimit la index.php avand $url=user/login/valoare_username/valoare_password dar fara sa apara datele in url.Exista vreo posibilitate sa fac asta?
Eu in momentul asta am formular prin get si in .htaccess preiau datele din formular si le retrimit tot prin get zicand index.php?$1 dar sunt visibile username-ul si parola in url si nu e ok.
Numai conteaza,am reusit intr-un final.
Adica am un formular si la action="user/login" cu campurile username si password si vreau ca in .htaccess sa il retrimit la index.php avand $url=user/login/valoare_username/valoare_password dar fara sa apara datele in url.Exista vreo posibilitate sa fac asta?
Eu in momentul asta am formular prin get si in .htaccess preiau datele din formular si le retrimit tot prin get zicand index.php?$1 dar sunt visibile username-ul si parola in url si nu e ok.
Numai conteaza,am reusit intr-un final.
Re: MVC
Salutare,
Poţi să pierzi puţin timp cu .
Cu sigurnaţă o să te ajute sa inţelegi mult mai bine lucrurile.
Poţi să pierzi puţin timp cu .
Cu sigurnaţă o să te ajute sa inţelegi mult mai bine lucrurile.
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 6 vizitatori