Visoka škola strukovnih studija za informacione i komunikacione tehnologije MVC - Modeli Školska 2017/18. Dr Nenad Kojić, dipl. inž. Luka Lukić, struk. inž. Danijela Nikitin, spec.stuk.inž
MVC.htaccess index.php Routing System Controller Model View
Modeli Videli smo do sada da kontroleri služe za dohvatanje i obradu podataka, a view dalje prikazuje te podatke. Do sada smo naučili kako kontroler (C) prosleđuje podatke ka view (V) i kako view iste prikazuje. U ovoj prezentaciji ćemo obraditi poslednji element MVC arhitekture, a to su M - Modeli.
Modeli Koja je uloga modela u MVC arhitekturi? Uloga modela je da komunicira i dohvata podatke iz baze.
1. Povezivanje sa bazom
Povezivanje sa bazom 1. Prvi korak je da kreiramo bazu podataka kroz phpmyadmin.
Povezivanje sa bazom 2. Sada je vreme da naš projekat povežemo sa bazom podataka. server baze podataka ime baze podataka Username i password za pristup bazi
Povezivanje sa bazom Ukoliko pokrećete projekat preko CLI Artisan, obavezno ugasiti, pa zatim ponovo pokrenuti projekat!
2. Kreiranje modela
Modeli Model obezbeđuje podatke i biznis logiku aplikacije To postiže tako što obezbeđuje komunikaciju sa bazom ili nekim drugim izvorom podataka Ne zna za HTML, web server, browser niti slično, samo pruža način upravljanja podacima (dohvatanje, izmena, brisanje)
Kreiranje modela Modeli se smeštaju u okviru foldera app/models. Folder Models se ručno mora kreirati.
Kreiranje modela Klasa jednog modela treba da izgleda ovako: <?php namespace App\Models; class Primer {?> } public function dohvatipodatke(){ // upit ka bazi }
3. Pisanje upita
Pisanje upita Za pisanje upita u Laravel-u, definisana je klasa DB. Ova klasa u sebi sadrži logiku za konekciju sa bazom, pri čemu čita parametre zadate u.env fajlu. DB klasa sadrži skup statičkih metoda za pisanje upita. Ova klasa se nalazi se nalazi u imenskom prostoru: Illuminate\Support\Facades.
SELECT Upit za dohvatanje podataka iz baze (SELECT) se realizuje na sledeći način: DB::select("select * from tabela"); Na mestu za upit se može napisati SELECT upit različite kompleksnosti. Preporuka je da se upit najpre izvrši u phpmyadmin-u, a zatim kopira u model!
SELECT Primeri: DB::select("select * from tabela1 t1 JOIN tabela2 t2 ON t1.id_t2 = t2.id_t2 WHERE t1.kolona = 5"); DB::select("select * from tabela1 ORDER BY kolona");
SELECT sa parametrima Prosleđivanje parametara SELECT upitu se može uraditi na više načina: 1. Konkatanacijom: DB::select( SELECT * FROM tabela WHERE kolona1 = ". $vrednost);
SELECT sa parametrima 2. Prosleđivanjem parametara kroz funkciju (preporuka): DB::select( SELECT * FROM tabela WHERE kolona1 = :naziv_parametra", array('naziv_parametra => $vrednost)); Na mestu gde je potrebno upitu proslediti vrednost neke promenljive piše se: :naziv_parametra.
SELECT sa parametrima Na mestu gde je napisan parametar, biće zamenjeno sa vrednošću koja se prosledi za taj parametar. Vrednost se prosleđuje kao drugi parametar metode DB::select(). S obzirom da parametara može biti više, prosleđuju se u formi niza.
SELECT sa parametrima Primer: DB::select("select * from tabela WHERE kolona1 = :kolona1 AND kolona2 = :kolona2 ", array('kolona1'=> $vrednost1, 'kolona2'=> $vrednost2)); Upit će izgledati: SELECT * FROM tabela WHERE kolona1 = Pera AND kolona2 = 5
INSERT Upit za dodavanje podataka u bazu (INSERT) se realizuje na sledeći način: DB::insert( INSERT INTO tabela VALUES (null, 'vrednost')"); Ukoliko je kolona AutoIncrement, kao vrednost staviti null. Prosleđivanje vrednosti upitu se vrši na isti način kao i kod SELECT upita, tj kao drugi parametar metode DB::insert() u formi niza.
INSERT sa parametrima Primer: DB::insert( INSERT INTO tabela (id, kolona1, kolona2) VALUES ( null, :kolona1, :kolona2 ), array('kolona1'=>$vrednost1, 'kolona2'=>$vrednost2));
UPDATE Upit za ažuriranje podataka iz baze (UPDATE) se realizuje na sledeći način: DB::update("UPDATE tabela SET kolona1 = :kolona1 WHERE id = :id", array('id' => $id, 'kolona1' => $vrednost ));
DELETE Upit za brisanje podataka iz baze (DELETE) se realizuje na sledeći način: DB::delete("DELETE FROM tabela WHERE id = :id", array('id' => $id));
4. Primer modela sa upitima
Primer modela <?php namespace App\Models; use Illuminate\Support\Facades\DB; class PrimerModel { PrimerModel Uključivanje klase DB za rad sa bazom iz drugog imenskog prostora public function dohvatipodatke(){ $rezultat = DB::select( SELECT * FROM tabela"); return $rezultat; } public function dodaj($kolona1, $kolona2) { $rezultat = DB::insert( INSERT INTO tabela VALUES (null,:kolona1, :kolona2)", array('kolona1'=>$kolona1, 'kolona2'=>$kolona2)); } SELECT INSERT
Primer modela UPDATE public function izmeni($id = 5, $kolona1){ $rezultat = DB::update("UPDATE tabela SET kolona1 = :kolona1 WHERE id = :id", array('kolona1' => $kolona1, 'id' => $id)); } DELETE public function obrisi($id){ $rezultat = DB::delete("DELETE FROM tabela WHERE id = :id", array('id' => $id)); } }?>
MVC.htaccess index.php Routing System Controller Model View
5. Povezivanje kontrolera i modela
MVC.htaccess index.php Routing System Controller Model View
Veza kontrolera i modela Mesto gde se završava zadatak modela, jeste kontroler. Sada treba uraditi još nekoliko koraka: 1. Kreirati kontroler (App/Http/Controllers) 2. Kreirati funkciju u okviru kontrolera u kojoj će se kontaktirati model 3. Preuzeti podatke iz modela 4. Odštampati podatke 5. Kreirati rutu za pristup kreiranoj funkciji (routes/web.php)
Veza kontrolera i modela <?php namespace App\Http\Controllers; PrimerController use App\Models\PrimerModel; class PrimerController { public function index(){ $model = new PrimerModel(); $podaciizbaze = $model->dohvatipodatke(); var_dump($podaciizbaze); } }?> Štampanje sadržaja promenljive u kojoj se nalazi rezultat upita ka bazi Uključivanje klase PrimerModel iz drugog imenskog prostora Kreiranje instance modela Pozivanje metode dohvatipodatke() iz klase PrimerModel
Veza kontrolera i modela routes/web.php Route::get( '/primer', 'PrimerController@index' ); Ruta za pristup preko URL Kontroler i funkcija koja se gadja unosom rute u URL adresi
MVC.htaccess index.php Routing System Controller Model View
6. Prosleđivanje podataka ka view - MVC
MVC.htaccess index.php Routing System Controller Model View
Prosleđivanje podataka ka view Sada imamo kreirane model PrimerModel (slajd 25) i kontroler PrimerController (slajd 31). 1. M 2. V 3. C
Prosleđivanje podataka ka view Sledeće što trebamo uraditi kako bismo komletirali MVC jeste: 1. Kreirati view (resources/views) -> primer.blade.php 2. Pozvati view u kreiranom kontroleru 3. Proslediti podatke iz kontrolera ka view 4. Prikazati podatke
Prosleđivanje podataka ka view <?php namespace App\Http\Controllers; use App\Models\PrimerModel; class PrimerController { } }?> public function index(){ $model = new PrimerModel(); $podaciizbaze = $model->dohvatipodatke(); $data = array(); $data['podaci'] = $podaciizbaze; return view('primer', $data); Prosleđivanje podataka iz baze ka view PrimerController Kreiranje instance modela Pozivanje metode dohvatipodatke() iz klase PrimerModel
Prosleđivanje podataka ka view primer.blade.php Član asocijativnog niza postaje promenljiva U $podaci se nalaze svi redovi iz tabele @foreach($podaci as $podatak) <p> {{ $podatak->kolona1 }} </p> @endforeach U $podatak se nalazi 1 red iz tabele Naziv kolone iz tabele, tj. one koja je dohvaćena upitom
MVC.htaccess index.php Routing System Controller Model View
Visoka škola strukovnih studija za informacione i komunikacione tehnologije MVC - Modeli Školska 2017/18. Dr Nenad Kojić, dipl. inž. Luka Lukić, struk. inž. Danijela Nikitin, spec.stuk.inž