|
Serverske aplikacije i baze podataka PHP, Perl, ASP, ASP .NET, ColdFusion... MySQL, PostgreSQL, MSQL, Oracle... |
|
Alatke vezane za temu | Vrste prikaza |
21.1.2013, 12:11 | #1 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
[php] Model View Controller
Znam sta Model View Controller (MVC) predstavlja i kako bi to trebalo da funkcionise ali problem je sto ne znam da ga direktno primjenim. Citao sam razne clanke kako ovo iskoristiti sa PHP + MySQL kombinacijom ali nikako da ja sam napisem jedan MVC. Koristio sam yii framework, citao njegov kod koji generise ali tu je toliko nasledjivanja i cuda da se ja ne mogu snaci.
Treba mi vasa pomoc da mi pomognete da osmislim sve i da citav MVC sam otkucam, tj. direktno primjenim na mom primjeru jer od citanja drugih kodova nema vajde. Takodje razliti clanci koje sam citao neke stvari razlicito rade. Imam bazu 'MyContacts' sa tabelama 'user' i 'phonebook'. Kod:
-- ----------------------------------------------------- -- Table `MyContacts`.`user` -- ----------------------------------------------------- DROP TABLE IF EXISTS `MyContacts`.`user` ; CREATE TABLE IF NOT EXISTS `MyContacts`.`user` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `username` VARCHAR(45) NOT NULL , `password` VARCHAR(45) NOT NULL , PRIMARY KEY (`id`) , UNIQUE INDEX `username_UNIQUE` (`username` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `MyContacts`.`phonebook` -- ----------------------------------------------------- DROP TABLE IF EXISTS `MyContacts`.`phonebook` ; CREATE TABLE IF NOT EXISTS `MyContacts`.`phonebook` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `name` VARCHAR(45) NOT NULL , `surname` VARCHAR(45) NOT NULL , `phone` VARCHAR(45) NOT NULL , `userid` INT UNSIGNED NOT NULL , PRIMARY KEY (`id`) , INDEX `FK_User` (`userid` ASC) , CONSTRAINT `FK_User` FOREIGN KEY (`userid` ) REFERENCES `MyContacts`.`user` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; login.php: http://www.dodaj.rs/f/1u/zI/4ZdSVvIY/ssloginpage.png register.php: http://www.dodaj.rs/f/3T/57/3zmapjKm/ssregisterpage.png home.php: http://www.dodaj.rs/f/3M/oY/1XJLAie3/sshomepage.png add.php: http://www.dodaj.rs/f/1p/Co/1nxwqjTB/ssaddpage.png delete.php: http://www.dodaj.rs/f/3h/Qx/yLq6AtZ/ssdeletepage.png Prvi problem na koji nailazim je sto ne znam sta mi od klasa sve treba. Koliko sam ja do sada shvatio trebace mi model klase 'User' i 'Phonebook'. Sada ne znam sta ove klase treba da sadrze od atributa i metoda. Na primer, da li klasa 'User' treba da sadrzi atribute 'id', 'username' i 'password' ili umjesto njih da sadrzi jedan niz koji sadrzi imena atributa u tabeli: Kod:
$labels = array("id", "username", "password"); Dalje potrebni su mi kontroleri, 'UserController' i 'PhonebookController'. Koje metode treba da sadrze kontroleri? Da li ove klase treba da sadrze metode za INSERT, SELECT i UPDATE ili to treba da bude u modelu. Da li UserController treba da sadrzi metodu za login? View, u ovoj aplikaciji imam login formu, formu za registraciju, tabelu koja prikazuje kontakte, formu za dodavanje kontakta i formu za brisanje kontakta. Da li mi trebaju klase UserView i PhonebookView, gdje ce UserView da sadrzi dva view-a loginView i registerView, a PhonebookView da sadrzi addView, deleteView, tableView. Da ove klase imaju metode za svaki view posebno i da ih onda iz kontrolera pozivam. Na primer za prikazivanje svih kontakata da ide ovako: Kod:
controller->actionName() { // sada znam da treba da prikazem sve iz tabele // (da li treba ovdje da pozovem metodu koja // ce da mi vrati sve upise iz baze gdje je // phonebook.userid = user.id, pa da to predam // ovoj dolje funkciji.) view->render("tableView", userid) } Kod:
www.mycontacts.net/controller/action // za prikaz home.php stranice (vidi sliku) www.mycontacts.net/phonebook/home // Tada bi ovaj url uzeo kontrolera phonebook, procitao ovo 'home' // i pozvao funkciju actionHome recimo, koja bi pozvala view->render("tableView" ili "home") Huh, mnogo sam ispisao, ali potrebno mi je ovo da sto bolje shvatim jer cu u skorijoj buducnosti da radim sa ovim. Hvala svakom ko bude imao zivaca da sve ovo procita a tek da mi barem malo pomogne |
6.5.2013, 1:30 | #2 |
Član
|
Re: [php] Model View Controller
Nadam se da nije kasno za odgovor!
MVC i OOP nisu ista stvar. MVC je pattern po kojem tri zasebne celine (Model, View i Controller) stupaju u međusobnu interakciju, u slučaju PHP-a to obično ide ovako: Zahtev dolazi od korisnika, obično preko URL-a i završava na Controlleru. Dakle korisnik gađa određeni kontroler, odnosno njegovu metodu. U slučaju da određene podatke treba povući iz baze, Controller će pozvati određeni Model. Model komunicira sa sistemom za upravljanje bazom podataka i vraća Controlleru određene podatke. Controller onda te podatke može da prosledi na neki View. View uzima podatke i generiše HTML kod koji se prikazuje krajnjem korisniku. Dakle, Controller je glavni baja i upravlja procesom obrade određenog zahteva. Model je zadužen za sve što ima veze sa perzistencijom određenih podataka a View je zadužen za prikaz krajnjem korisniku. Zašto se ovo radi? Iz više razloga, ali između ostalog i zbog takozvanog loose coupling principa po kojem komponente sistema traba što manje da zavise jedna od druge. Drugim rečima, ako ikada poželiš da promeniš sistem za upravljanje bazom podataka (npr. sa MySQL prelaziš na Oracle), samo treba da regulišeš model. Još gore, ako skroz izbaciš sistem za upravljanje bazom podataka i rešiš da podatke čitaš iz XML-a ili čak tekstualnog fajla, samo treba da čeprkaš po modelu, ostalo ne diraš (postoje izuzeci, o tom po tom). Takođe, ako rešiš da sajt optimizuješ za pristup sa mobilnog uređaja, bojlera, pegle ili nekog drugog smart čuda, samo treba da regulišeš stvari u View. MVC se obično implementira tako što se napravi bar po jedan objekat za M, V i C. Ima nekih pristupa koji kažu npr. one table = one model ali to je na tebi kako ćeš rešiti implementaciju. |
Sledeći korisnik se zahvaljuje korisniku dusandevic na korisnoj poruci: | ||
clzola (4.1.2014) |
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Generals Zero Hour - ShockWave Release 1.0 | Васили | Strateške igre | 50 | 20.8.2015 17:41 |
Ubuntu 10.04 i wireless | coge intrare | Komunikacioni uređaji i umrežavanje | 0 | 5.7.2011 19:45 |
Neko uživa u Linuxu, a neko pada u depresiju | pmale | Slobodni softver | 63 | 8.2.2010 13:19 |
Fedora vs Broadcom | barjaktar | Slobodni softver | 20 | 27.7.2009 13:53 |
Wirelles i Ubuntu | Djordje Turjacanin | Slobodni softver | 14 | 19.12.2008 23:40 |