MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od...

19
MVC Dr Nenad Kojić, dipl. inž. Luka Lukić, dipl. inž. Školska 2018/19. Danijela Nikitin, spec .stuk.inž. Visoka škola strukovnih studija za informacione i komunikacione tehnologije Prvo da se završi instalacija… Instalacija Laravela Prvo treba preuzeti composer sa: https://getcomposer.org/ Instalacija Laravela Zatim se preuzima cmder sa: http://cmder.net/ Raspakovati u:

Transcript of MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od...

Page 1: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

MVC

Dr Nenad Kojić, dipl. inž.Luka Lukić, dipl. inž.

Školska 2018/19. Danijela Nikitin, spec .stuk.inž.

Visoka škola strukovnih studija za informacione

i komunikacione tehnologije

Prvo da se završi instalacija…

Instalacija Laravela

Prvo treba preuzeti composer sa:

https://getcomposer.org/

Instalacija Laravela

Zatim se preuzima cmder sa:

http://cmder.net/

Raspakovati u:

Page 2: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Instalacija Laravela

Pokrenuti Cmder, pozicionirati se u htdocs folder i otkucati sledeće komande:

• composer require global laravel/installer (instalacija Laravela)

• laravel new ime_projekta (pravi se folder sa svim neophodnimfajlovima)

Nakon instalacije…

Stuktura fajlova

• Nakon instalacije, folder u kome se nalazi Laravel

Stuktura fajlova

• Za početak rada, od suštinskog značaja su sledeći folderi i njihov sadržaj: app – smešteni modeli i kontroleri public – nalazi se sav javni sadržaj (slike, javascript,css) resources – views, raw un-compiled assets (LESS, SASS, JavaScript)

routes – definisanje i upravljanje rutama

.env – osnovni konfiguracioni parametri

Page 3: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Dobili smo MVC. Šta sa tim?

MVC arhitektura

• MVC arhitektura je softverski patern koji odvaja prikaz informacija od interakcije korisnika sa tim informacijama

• MVC predstavlja akronim od Modle-View-Controller

• Proteklih nekoliko godina postala je jako popularna strategija za organizaciju web aplikacija

• Ideja je da se aplikacija podeli u tri celine: Model, View, Controller

MVC arhitektura

Controller

• Centralni deo aplikacije, upravlja korisničkim zahtevima i na osnovu zahteva vraća odgovarajući odgovor (request – response, učitava view sa podacima iz modela, vraća json podatke...)

• Tumači i upravlja HTTP zahtevima

• Poziva Model, menja ili dohvata podatke i, ako je potrebno bira koji view će se učitati kao response

MVC arhitektura

View

• Korisnički interfejs, služi za prikaz podataka dobijenih iz modela

• Može da šalje zahtev kontroleru za izmenu prikazanih podataka

• Aplikacija se najčešće sastoji iz većeg broja view-a

• U web aplikacijama, view je fajl u kome se nalazi HTML

• Postoje „templating engine-i“ koji olakšavaju pravljenje view-a (blade, twig)

Page 4: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

MVC arhitektura

Model

• 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) Ranije…

Proceduralni pristup

index.php

kontakt.php

proizvodi.php

Podfolder, sa dodatnim

fajlovima

http://localhost/projekat/index.php

http://localhost/projekat/proizvodi.php

http://localhost/projekat/kontakt.php

Proceduralni pristup

index.php

Database

kontakt.php

Database

C:/xampp/htdocs/projekat/index.php C:/xampp/htdocs/projekat/kontakt.php

Page 5: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Sada…

MVC pristup

.htaccess index.php

Controller Model

View

Routing System

Realizacija MVC-a

• U root-u sajta (osnovni public folder) se nalazi .htaccess fajl koji svaki zahtev preusmerava na index.php stranu

• index.php odatle dalje prosleđuje zahtev i poziva sistem za rutiranje

• Sistem za rutiranje interpretira URL adresu i na osnovu nje učitava određen kontroler i njegov metod

Realizacija MVC-a

• Šta je i čemu služi fajl .htaccess?

• .htaccess je konfiguracioni fajl koji direktno menja podešavanja Apache servera

• Ovim fajlom se mogu promeniti podrazumevana podešavanja za Apache i ona će važiti samo za folder u kome se nalazi ovaj fajl

• Služi da dozvoli/zabrani pristup određenim fajlovima i folderima, da se izvrši redirekcija sa jedne stranice na drugu itd...

• Ukoliko ne postoji tražena strana, korisnik se preusmerava na 404 stranu

Page 6: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Rutiranje – veza browsera i koda

Rutiranje u Laravelu

• Nakon pristizanja HTTP zahteva, on biva preusmeren na Laravel-ov sistemza rutiranje, koji interpretira URL adresu, i na osnovu nje poziva odgovarajući kontroler i njegov metod

• Metod u kontroleru zatim obavlja potrebnu logiku, ako ima potrebe poziva model i na kraju učitava view

• Tim oblikom komunikacije je obuhvaćen je MVC princip projektovanja

• Ruta je sve što se nalazi iza baznog dela URL adrese sajta

• http://pera.com/ruta bazni deo { http://pera.com }

ruta { /ruta }

Definisanje rute

• Folder za rute se nalazi u root-u projekta, u folderu routes

• Fajl u kome se kreiraju rute je web.php

Definisanje rute

• Folder za rute se nalazi u root-u projekta, u folderu routes

• Fajl u kome se kreiraju rute je web.php

Page 7: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Poziv kontrolera preko rute

• Ruta se u Laravelu definiše pomoću klase Route i njenih statičkih metoda get, post, put, patch, delete i options

• Najčešće se koriste get i post, dok se ostali koriste za realizaciju web servisa

• Statički metod je metod koji nije vezan ni za jednu konkretnu instancu klase, već važi na nivou klase

• Statički metod se poziva preko imena klase, ako se poziva van klase ili rezervisane reči self ukoliko se poziva unutar definicije klase

Poziv kontrolera preko rute

• Primer definicije statičkog metodaclass Primer

{

public static function proba()

{

return “Proba”;}

}

• Primer poziva statičkog metoda• Unutar metoda neke druge klase: Primer::proba()

• Unutar metoda klase čiji je član taj statički metod: self::proba()

Rad sa rutama - basic Rad sa rutama - basic

Page 8: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Rad sa rutama - basic Poziv kontrolera preko rute

• Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj ruti očekuje

• Kao prvi parametar metodu rute se prosleđuje ruta u string formatu, koja se očekuje iz URL adrese, dok drugi ukazuje na konkretan kontroler i njegov metod

• Karakter @ u drugom parametru razdvaja ime kontrolera od imena metoda tog kontrolera

Poziv kontrolera preko rute

Ako preko browsera posetimo adresu: http://www.nekisajt.com/strana

Ruta koja će se pozvati biće /strana

Potrebno je definisati koji kontroler i metod se učitavaju prilikom gađanja ove rute:

Route::get(“/strana”, “kontroler@metod”);

Klasa za rutiranje

Statički metod zadužen za GET tip request-a

Ime kontrolera koji se

poziva

Metod unutar kontroleraruta

Poziv kontrolera preko rute

• Konkretna ruta poziva kontroler i njegov metod, koji ucitava željeni view, koji se prikazuje na kraju prikazuje korisniku

Page 9: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Primer

Route::get('/kontakt',

'KontaktController@prikaz_kontakt');

Route::get('/kontakt/{fname}/{sname}',

'KontaktController@dohvati_kontakt');

Route::get('/kontakt', 'KontaktController@prikaz_kontakt');

Route::get('/kontakt/{fname}/{sname}', 'KontaktController@dohvati_kontakt');

Kreiranje konrolera – unapred…

Kreiranje konrolera – unapred…

Na početnu i na kraju OOP…

Page 10: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Klase u Laravelu

• Svaki kontroler u Laravelu je klasa

• Klase u Laravelu se automatski učitavaju po „Standardu za automatsko učitavanje“koje je definisao http://www.php-fig.org/

• Trenutni standard za automatsko učitavanje klasa je PSR4

• Da bi po navedenom standardu klasa mogla da se automatski učita pomoću loader-a obezbeđenog composer-om, ona mora da ima definisan imenski prostor (imenski prostor govori funkciji za automatsko učitavanje gde se klasa nalazi unutar hijerarhije foldera projekta)

• Imenski prostor se definiše rezervisanom rečju namespace i uvek se piše kao prva direktiva u klasi

Prosleđivanje parametara iz rute

Rad sa resource (route:list)

Bez metoda

Za pozivanje u kodu

(linkovi npr.)

Page 11: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Upotreba metoda show()

Rad sa resource

• Ako se za primer uzme metod show, i u njegovom telu napiše• public function show($id)

{

return "Ovo je metod show sa parametrom: " . $id;

}

• Ako se on pozove kao u listingu sa

GET|HEAD | artikli/{artikli} | artikli.show

Klase u Laravelu

• Definisanje klase u Laravelu koju je moguće automatski učitati

• Klasa se nalazi u imenskom prostoru App\Klase\Primeri. U definiciji imenskogprostora (namespace) ne treba navoditi ime klase!

• Prilikom kreiranja instance klase, neophodno je navesti potpuno kvalifikovano ime klase.

• Potpuno kvalifikovano ime klase se navodi celim imenskim prostorom zajedno sa imenom klase (za razliku od definicije namespace-a) i koristi se pri pravljenju instance klase.

Page 12: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Klase u Laravelu

namespace App\Klase\Proba\Primeri;

class Primer

{

public $polje1;

public $polje2;

public function metod()

{

return $this->polje1;

}

}

Ovakvom definicijom klase kasnije ju je moguće instancirati i koristiti bilo gde unutar projekta.

Primer poziva klase:

$instanca = new App\Klase\Proba\Primeri\Primer();

Potpuno kvalifikovano ime

klase (sadrži namespace [App\Klase\Primeri] i ime

klase [Primer])

Klase u Laravelu

• Namespace klase može da postane veoma dugačak i težak za pamćenje

• Zbog toga je uvedena rezervisana reč use koja govori da će se u tekućem fajlu koristiti klase iz navedenog namespace-a

• Definiše se uvek ispod namespace-a, a iznad definicije klase

• Sledi primer klase koja koristi instancu klase koju smo definisali na prethodnom slajdu. Klasa se nalazi u imenskom prostoru App\Klase\Primeri i zove se Proba

namespace App\Klase\Primeri;

use App\Klase\Proba\Primeri\Primer;

class TestKlasa

{

public function test()

{

return new Klasa(); //vraca instance klase definisane na slajdu iznad

}

}

//Klasa se nalazi u: app/Klase/Primeri/TestKlasa.php

Kontroleri u Laravelu

• Svi kontroleri u Laravelu se nalaze u folderu app/Http/Controllers

• Kontroler je klasa! Neophodno je i da ime fajla i ime klase počinju velikim slovom

• Kao i bilo koja druga klasa, kontroler ima svoja polja i metode

• Prilikom definisanja rute u routes/web.php navodi se ime kontrolera i imemetode koja se u tom kontroleru poziva

• Neophodno je navesti imenski prostor (namespace)

Kontroleri u Laravelu

• Definisanje kontrolera

namespace App\Http\Controllers;

class Kontroler

{

public function metod()

{

return view(‘home’); //Funkcija koja učitava view ‘home.blade.php’ izfoldera resources/views

}

}

Page 13: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

View

• Kontroler i model su klase, dok samo View predstavlja PHP stranicu tj fajl

• U ovom fajlu se nalazi sav potreba kod za prikaz podataka korisniku

• Tu se nalazi sav statički i dinamički deo web strane tj. ceo HTML, CSS, JS kod, ali i PHP kod za dinamičku obradu i prikaz podataka

• Svi view-ovi se nalaze u folderu recources/views

• Svaki view ima ekstenziju blade.php

• Blade je template engine i dozvoljava naprednu upotrebu PHP-a za potrebe generisanja dinamičkih web stranica

• Fajlovi u views mogu biti raspoređeni u proizvoljne podfoldere

Inicijalni view

Poziv view-a preko kontrolera

• Kontroler funkcijom view(‘home’) učitava istoimeni view iz foldera resources/views

• Ne treba navoditi ekstenziju “.blade.php”

web.php

home.blade.php

Kontroler.php

Kreiranje novog view-a

• Novi view se pravi kao klasična PHP stranica sa HTML/CSS sadržajem

• Pretpostavimo da se pravi view kao na slici (prikaz.blade.php)

Page 14: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Korekcije u kontroleru

• Pretpostavimo da krećemo od napravljenog kontrolera ProizvodiController, i njegovo metoda show() koji je dohvatai i prikazivao parametar iz URL adrese

• Ovo je bilo do sada:

• Tj. pozivanjem se dobijalo:

Pozivanje view-a

• Ako se sada iz kontrolera pozove view kao

• Sada se pozivanjem dobija :

• Ovo je statički prikaz! Uvek isti!

Prosleđivanje parametara

• Podaci se nalaze u kontroleru

• U kontroler mogu da stignu ili iz rute ili iz modela

• Ako taj podatak treba da se prikaže korisniku, onda se iz kontrolera mora proslediti view-u

• Postoji više načina da se podatak prosledi pozvanom view-u

1. Metod with()

1. Metod with()

• Kontroler

• View

• Poziv

Page 15: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

2. Funkcija compact()

• Kontroler

• View

• Poziv

2. Funkcija compact() – više parametara

• Kontroler

• View

• Poziv

2. Funkcija compact() – više parametara -alternativa

• Kontroler

• View

3. Drugi argument view-a (data)

• Kontroler

• View

Page 16: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

3. Drugi argument view-a (niz)

• Kontroler

• View

I tako podatak iz kontrolera stiže do view-a!

Šta sada?- Greške

Najčešće greške - kontroler

• Greška koja nastaje kada nije definisan kontroler

Page 17: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Najčešće greške - metod

• Greška koja nastaje kada nije definisan metod u kontroleru

Najčešće greške - ruta

• Greška koja nastaje kada nije dobro definisana ruta

Model je poslednji element MVC-a- Klasa zadužena za rad sa podacima

Modeli u Laravelu

• Do sada smo obradili C i V delove MVC arhitekture

• Model je zadužen za obradu i dohvatanje podataka i najčešće je realizovan kroz rad sa bazom podataka

• Dohvatanje i obradu podataka delegira kontroler

• Kontroler podatke dobijene od modela dalje prosleđuje view-u kako bi se oni prikazali

• Sve modele smeštamo u folder app/Models. On nije inicijalno napravljen ineophodno ga je napraviti ručno

Page 18: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Modeli u Laravelu

• Da bismo ostvarili vezu sa bazom, neophodno je da podesimo pristupne parametre

• Pristupni parametri se, pored ostalih konfiguracija definišu u fajlu .env u root-u

• Nakon podešenih pristupnih parametra kreiramo folder app/Models

Modeli u Laravelu

• Kao i kontroler, i model je klasa

• Važe ista pravila za imenski prostor kao i u kontroleru

• Definisanje modela:

<?php

namespace App\Models;

class ModelPrimer {

public function dohvatiPodatke()

{

return Array("Pera", "Mika", "Laza");

}

}

Napravljeni model ne radi ništa pametno, sadrži jedan metod koji vraća niz. Kasnije u primerima će se raditi sa bazom podataka.

Modeli u Laravelu

• Sada smo definisali svaki element MVC-a

• Sledeći korak je da kontroler učita model, iz njega dohvati podatke i prosledi ih view-u za prikaz

• Krećemo tako što definišemo rutu

Route::get(‘/test’, ‘kontroler@metod’);

routes/web.php

Modeli u Laravelu

• Nakon kreiranja rute, pravimo kontroler i metod koje ta ruta poziva

• Kontroler u svom metodu kreira instancu model-a i poziva metoddohvatiPodatke(), koji kao rezultat vraća niz koji se prosleđuje view-u

Kod za kontroler (app\Http\Controllers\Kontroler.php)

<?php

namespace App\Http\Controllers;

use App\Models\ModelPrimer;

class Kontroler

{

public function metod()

{

$modelInstanca = new ModelPrimer();

$podaci = $modelInstanca->dohvatiPodatke();

return view('home', [

’skupPodataka' => $podaci

]);

}

}

Kod za model (app\Models\ModelPrimer.php)

<?php

namespace App\Models;

class ModelPrimer {

public function dohvatiPodatke()

{

return array('Pera', 'Mika', 'Laza');

}

}

Page 19: MVC - Висока ICT школа · Rad sa rutama - basic Poziv kontrolera prekorute Svaki od navedenih metoda predstavlja tip HTTP zahteva koji se na toj µ ]} lµi Kao prvi parametar

Modeli u Laravelu

• Da bi sve to moglo da radi, neophodno je da postoji navedeni view (ime view-a je home)

• View sadrži HTML kod i nalazi se u folderu resources/views

• Ima ekstenziju .blade.php, tako da je konkretan fajl home.blade.php

Kod za view

<html>

<head>

<title>View proba</title>

</head>

<body>

<ul>

<?php

foreach($skupPodataka as $podatak) {

echo "<li>" . $podatak . "</li>";

}

?>

</ul>

</body>

</html>

Krajnji prikaz

resources/views/home.blade.php

Tako je podatak iz Modela došao do Kontrolera, a on ga dalje prosledio View na prikaz!

Da li je ovo realno?Da ali ne sa fix podacima u modelu, jer oni treba da se tu dobiju iz baze podataka.Zato, idemo dalje!

MVC

Dr Nenad Kojić, dipl. inž.Luka Lukić, dipl. inž.

Školska 2018/19. Danijela Nikitin, spec .stuk.inž.

Visoka škola strukovnih studija za informacione

i komunikacione tehnologije