85
——————————————————————- Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj aplikacija za elektronsko učenje korišćenjem Laravel radnog okruženja ————————————————————————————————- Student: Jelena Matejić Mentor: Prof. dr Ivan Stanković Niš, Septembar 2018. godine

Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

——————————————————————-Univerzitet u Nišu

Prirodno-matematički fakultetDepartman za računarske nauke

Master rad na temu:

Razvoj aplikacija za elektronsko učenjekorišćenjem Laravel radnog okruženja

————————————————————————————————-

Student:Jelena Matejić

Mentor:Prof. dr Ivan Stanković

Niš, Septembar 2018. godine

Page 2: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Sadržaj

1 Uvod 3

2 Uvod u PHP 42.1 Razvoj programskog jezika PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.1.1 PHP 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.1.2 PHP 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.3 PHP 5.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.4 PHP 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Način izvršavanja PHP-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Opšte osobine PHP dokumenata . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4 Upravljačke strukture u PHP-u . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.5 Klase i objekti u PHP-u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.5.1 Statičke promenljive i metode . . . . . . . . . . . . . . . . . . . . . . . . . 132.5.2 Konstruktori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5.3 Nasleđivanje klasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 MVC (Model View Controller) arhitektura 163.1 Popularizacija Model View Controller arhitekture . . . . . . . . . . . . . . . . . . 173.2 Model View Controller arhitektura kod web aplikacija . . . . . . . . . . . . . . . 193.3 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.4 Pogled (View) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.5 Kontroler (Controller) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.6 Interakcija komponenata u MVC arhitekturi . . . . . . . . . . . . . . . . . . . . . 213.7 Prednosti i mane MVC arhitekture . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4 Laravel radno okruženje 234.1 Istorijski razvoj Laravel okruženja . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.1.1 Laravel 1 i Laravel 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.1.2 Laravel 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.1.3 Laravel 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.1.4 Laravel 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.2 Komponente Laravela i njihova interakcija . . . . . . . . . . . . . . . . . . . . . . 254.3 Prednosti i mane Laravel razvojnog okruženja . . . . . . . . . . . . . . . . . . . . 264.4 Poređenje Laravela sa ostalim PHP razvojnim okruženjima . . . . . . . . . . . . 27

5 Alati u Laravelu 305.1 Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305.2 PHP Artisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305.3 Middleware (Međusoftver) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.4 Blade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5.4.1 Osnovna sintaksa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.4.2 Blade komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.5 Eloquent ORM (Eloquet Object Relational Mapper) . . . . . . . . . . . . . . . . 35

6 Osnove Laravel razvojnog okruženja 366.1 Instaliranje Laravel okruženja i pokretanje projekta . . . . . . . . . . . . . . . . . 366.2 Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

6.2.1 Subnamespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

1

Page 3: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.2.2 Globalni namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406.3 Klase u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426.4 Realizacija MVC arhitekture u Laravel projektu . . . . . . . . . . . . . . . . . . . 436.5 Rutiranje u Laravel projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

6.5.1 Paterni u rutama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.6 Kontroleri u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

6.6.1 Organizacija kontrolera . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.7 Rad sa zahtevima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486.8 Kreiranje View-a u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496.9 Modeli u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506.10 Migracije u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506.11 Relacija jedan prema jedan (1:1) . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

6.11.1 Relacija jedan prema više (1:n) . . . . . . . . . . . . . . . . . . . . . . . . 556.11.2 Relacija više prema više (n:m) . . . . . . . . . . . . . . . . . . . . . . . . . 56

6.12 Relacioni model baze podatka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.13 Rad sa bazom podataka u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . 606.14 Query builder u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626.15 Eloquent ORM u Laravelu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

7 Opis i izrada aplikacije za elektronsko učenje u Laravel razvojnom okruženju 687.1 Početna strana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697.2 Registracija novog korisnika i njegova prijava . . . . . . . . . . . . . . . . . . . . 707.3 Nivoi pristupa u aplikaciji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

7.3.1 Administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737.3.2 Predavač . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767.3.3 Student . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

8 Zaključak 79

9 Literatura 80

2

Page 4: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

1 Uvod

Laravel je besplatno razvojno okruženje otvorenog koda, pisano u programskom jeziku PHP. Ovookruženje je dizajnirano za brz i jednostavan razvoj MVC web aplikacija.Laravel je relativno mlado razvojno okruženje koje je za kratko vreme dobilo veliki broj koris-nika i njegova zajednica programera svakim danom postaje veća. Prema statističkim podacimaiz prethodne godine Laravel je najpopularnije razvojno okruženje za kreiranje novih projekata.Brz rad i brzo kreiranje aplikacije u najvećem omogućuju njegovi brojni alati i funkcionalnostikoje se uvoze vrlo jednostavnim komandama. Početnike ovo okruženje privlači jednostavnimnačinom kodiranja i jednostavnošću, koja naročito pogoduje početnicima koji ne žele da buduzatrpani nepreglednim i brojnim fajlovima, sa kojima obično okruženja dolaze.Njegovi glavni kvaliteti su: stabilnost, optimizacija resursa, brzina učitavanja i lakoća učenja.

Sa druge strane, učenje na daljinu postaje vodeći način obrazovanja u savremenom društvu.Zbog svojih brojnih prednosti, rado je prihvaćeno od strane obrazovnih institucija, predavača,studenata i učenika širom sveta. Elektronsko učenje pruža brojne mogućnosti od kojih se ističu:učenik i predavač ne moraju biti u istoj prostoriji, učenik može sam odabrati kurs za koji je zain-teresovan i pohađati lekcije onim intenzitetom i u onom redosledu koji njemu odgovara, lekcije jemoguće preslušavati iznova sa bilo kog kraja sveta, a jedino šta je potrebno za "prisustvo nastavi"jesta internet konekcija. Predviđa se da bi elektronsko učenje moglo da iskoreni nepismenost, jerbi i u najzabačenijim delovima sveta bilo moguće obrazovati se, na veoma jednostavan način.

Kao spoj razvojnog okruženja Laravel i elektronskog učenja nastala je aplikacija Pripremi Sekoja je izrađena kao prilog ovom radu. Navedena aplikacija se sastoji iz tri celine: dela namen-jenog administratorima, dela namenjenog predavačima i dela namenjenog studentima. Njenaglavna ideja je elektronska priprema prijemnih ispita za različite fakultete u našoj zemlji. U ovojaplikaciji, priprema za prijemni ispit se obavlja putem video lekcija i opisa koji su priloženi uzlekcije. Lekcije objavljuju predavači u okviru svojih kurseva, a studenti su ti koji nakon prijavena kurs mogu pregledati lekcije, željenim redosledom i intenzitetom.

Detaljnije o programskom jeziku PHP, MVC arhitekturi, razvojnom okruženju Laravel i izradiPripremi Se aplikacije, biće reči u narednim poglavljima. Iskreno se nadam da ćete steći novaznanja ili potvrditi i proširiti svoja već stečena znanja u ovim oblastima.

3

Page 5: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

2 Uvod u PHP

PHP (Hypertext Preprocessor) je serverski interpretatorski skript programski jezik dizajniranza web razvoj, a ređe se koristi i za klasično programiranje. Drugim rečima PHP je programskijezik namenjen za dinamičko generisanje HTML koda (HTML stranica) na serveru. Na ovajnačin korisnik ima pristup HTML stranici bez mogućnosti uvida u kod kojime je ta stranicagenerisana.Danas popularna verzija PHP-a je najvećim delom pisana u programskom jeziku C, a neke odkomponenti su pisane u programskom jeziku C++. Njegov kod se može jednostavo kombinovatisa HTML kodom ili se može koristiti u kombinaciji sa raznim tematskim mehanizmima (engl.template engines) i web okvirima.

2.1 Razvoj programskog jezika PHP

Programski jezik PHP se počeo razvijati 1995. godine kada je programer Rasmus Lerdorf napisaoskriptu koja mu je omogućavala da prati broj posetilaca koji posećuju njegovu internet stranicu.Ovaj skup alata Rasmus je koristio za svoje potrebe i bio je napisan u Perl-u. Nazvao ga jePersonal Home Page (PHP) i delio ga besplatno.Vremenom, autor je iz tehničkih razloga kompletan kod iz Perl-a prepisao u C i na taj načinomogućio komunikaciju sa bazama podataka, a korisnicima njegove stranice omogućio je danaprave sopstvene web prezentacije. Kod je i dalje ostao besplatan i otvoren za javnost, što jeRasmusu omogućilo da brže razvija projekat i da brže pronalazi i ispravlja postojeće greške inedostatke.Današnja verzija PHP-a skoro da ni malo ne liči na prvu PHP skriptu napisanu u Perl-u 1995.godine. Jezik je napredovao na svim poljima. Autor jezika je oko sebe okupio kvalitetan tim ljudikoji su razvijali jezik, poboljšavali njegovu prvobitnu strukturu, dodavali i oduzimali funkcional-nosti i stvorili PHP kakav danas imamo. U daljem tekstu ćemo detaljnije videti da se tokomvremena jezik proširivao i sticao nove mogućnosti poput one za objektno-orijentisanim programi-ranjem. Neki stručnjaci kažu da PHP liči na programski jezik C++ u smislu da dozvoljava ičisto proceduralno programiranje, ali istovremeno omogućava i upotrebu klasa i drugih koncepataobjektno-orijentisanog programiranja poput nasleđivanja, apstraktnih klasa i metoda, interfeisai tako dalje.U predstojećem tekstu, biće ukratko opisan istorijski razvoj PHP-a i promene koje je PHP imaodo danas.

2.1.1 PHP 3.0

PHP 3.0 je verzija zvanično objavljena u junu 1998. godine i predstavlja prvu verziju koja dostaliči na današnje moderne verzije PHP-a.Glavna prednost u odnosu na pređašnje verzije je u njegovoj proširivosti, što je privuklo mnogeprogramere širom sveta da dodaju nove mogućnosti. Verzija 3.0 je imala vrlo dobru podršku zarazne vrste baza podataka (DBM, mSQL i Postgres95), uvela je kolačiće, mogućnost objektnoorijentisanog programiranja i veću konzistentnost u jezičkoj sintaksi.Nove mogućnosti su privukle nove korisnike, naročito one koji su navikli da rade sa objektno-orijentisanim jezicima. Nove metodologije koje su omogućile koncept klase i objekta PHP supostavile na vrh liste skript jezika.

4

Page 6: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

2.1.2 PHP 4.0

PHP 4.0 verzija je zvanično objavljena u maju 2000. godine. Sa pojavom verzije 4.0 funkcional-nost PHP-a je dovedena na veoma ozbiljan nivo. Jezik postaje široko primenljiv i rado korišćenod strane programera.Ova verzija je bila usmerena ka poboljšanju rada sa većim aplikacijama i ka poboljšanju mod-ularnosti. Na početku PHP nije bio predviđen za aplikacije izuzetno velikog obima, pa ga jetrebalo prilagoditi novim izazovima. Bilo je potrebno preispitati i korigovati čitavu logiku sis-tema, što je donelo znatna unapređenja.Sa verzijom 4.0 došlo je i do unapređenog upravljanja sesijom što je doprinelo efikasnijem praćenjuaktivnosti korisnika. Još jedna od prednost bila je i uvedena podrška za Javu tj. povezivanje saJava objektima iz PHP aplikacija. Ova karakteristika je PHP-u donela bolju interpretabilnostjer je programski jezik Java nezavisan od platforme.Novo jezgro PHP-a nazvano je Zend mašina (engl. Zend engine). Pored svih navedenih pred-nosti, verzija 4.0 je uključivala i keširanje standardnog izlaza, bolju podršku za različite webservere i sigurniji prenos korisničkih podataka. Mogućnost kompletne i heš enkripcije bila jeobogaćena modernim: Blowfish, MD5 i TripleDES algoritama.

2.1.3 PHP 5.0

PHP 5.0 verzija je zvanično izašla u julu 2004. godine nakon dugog i iscrpnog razvoja i nekolikoprobnih verzija. Koristi jezgro Zend 2.0 mašine i novi objektni model koji je doneo mnoštvoizmena i mnoge nove mogućnosti.Značajno bolja objektno-orijentisana funkcionalnost se odnosi na postojanje funkcionalnih do-dataka kao što su eksplicitni konstruktori i destruktori, kloniranje objekata, apstraktne klase,interfejsi, kao i poboljšano upravljanje objektima. Pored navedenih prednosti, u verziji 5.0 po-javljuje se i standardizovan oblik logike za upravljanje greškama. To je takozvano try/catchupravljanje izuzecima kao što su to već ranije pružali C++, C# , Java i slični jezici.Još jedno poboljšanje je u radu sa stringovima. Prethodne verzije tretiraju stringove kao nizove,dok je u verziji 5.0 uvedena sintaksa specijalizovanog ofseta stringova.Kao što je i u ranijim verzijama bio slučaj, i ovde se nastavilo sa poboljšanjem podrške webservisa i XML servisa.

2.1.4 PHP 7.0

Nakon dugog niza godina i preskočene verzije PHP 6.0 , u decembru 2016. godine zvanično jeobjavljena nova verzija PHP 7.0.Uz novi PHP dolazi i nova generacija Zend engine-a to je takozvani PHP# NG (PHP NextGeneration). Nova verzija Zend-a omogućuje da se kompajliranje radi gotovo u isto vreme kadai izvršavanje koda, pa se na izvršavanje više ne čeka. Upravo to ubrzanje je najbitnija promenaPHP 7.0 verzije u odnosu na verziju PHP 5.0. Novija verzija ima za gotovo upola veću brzinuu odnosu na prethodne sa čime dolazi i mnogo ugodnije korišćenje. Novi Zend je omogućio iznatno manje trošenje resursa pri učitavanju iste stranice na istom uređaju.Kao što smo već mogli uočiti, svaka nova verzija donela je poboljšanja, rešene bagove, poboljšanjesigurnosti, a nekada čak i promenu u strukturi koda. U ovoj verziji uklonjena je podrška za mnogeekstenzije u cilju maksimalnog unapređivanja performansi. Ovakve promene su dovele do togada novija verzija PHP-a nije kompatibilna sa starijim verzijama koda, te je potrebno uskladitikod svoje web stranice sa novim pravilima i mogućnostima PHP-a.

5

Page 7: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

2.2 Način izvršavanja PHP-a

Iako se PHP može koristiti za programiranje konzolnih aplikacija i grafičkog interfejsa, njegovaglavna upotreba je u programiranju dinamičkih internet stranica. Program koji se napiše uPHP-u ne zahteva kompajliranje (prevođenje) nego se interpretira pri svakom izvršavanju. PHPinterpretator može postojati kao eksterna aplikacija koja se poziva svaki put kada korisnik zahtevaizvršenje neke skripte ili interpretator može biti uvek učitan u memoriju te se ne mora pozivatieksterni program, što dosta doprinosi bržem izvršavanju.Uobičajeni scenario po kome se izvršavaju PHP skripte je:

1. Klijent koji je korisnik nekog internet pregledača zahteva PHP stranicu sa servera

2. Server prosleđuje zahtev klijenta web serveru

3. Web server prepoznaje da se traži PHP datoteka i izvršava sadržaj datoteke kao programpomoću PHP modula

4. Izlani tekst programa se klijentu šalje kao rezultat zahteva

5. Klijentska strana prepoznaje vrstu poslatog rezultata (HTML kod, slika, PDF sadržaj iarhiva) i rezultat se klijentu prikazuje na odgovarajući način

Slika 1: Izvršavanje PHP skripte na web serveru

Nakon izvršenja skripte, PHP sam vrši uništavanje promenljivih, vraća prethodno zauzeteresurse, pa nema potrebe za ručnim uništavanjem promenljivih.PHP kod se može organizovati u više datoteka, uz pomoć funkcija i klasa. Prioritet u izvrša-vanju imaju one datoteke koje su prve date interpretatoru na izvršavanje. Ukoliko datoteka nijenavedena, server će, podrazumevano, pokušati da automatski pokrene datoteku index.php.

6

Page 8: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

2.3 Opšte osobine PHP dokumenata

Od samog početka pa do danas, glavni cilj PHP-a je da bude praktičan i besplatan programskijezik. U svom razvoju dobio je epitete i moćnog jezika koji ima širok spektar mogućnosti kojemože ponuditi korisniku.Za razliku od C-ovskih jezika, kod PHP-a nema potrebe za uključivanjem dodatnih bibliotekada bi se izvršilo jednostavno ispisivanje na ekranu. PHP datoteka je nalik većini skriptnih jezikai sadrži jednostavan skup naredbi koje se izvršavaju jedna za drugom (od prve do poslednjenaredbe u skripti).PHP datoteke mogu sadržati sledeće elemente:

• HTML oznake

• Oznake za PHP

• PHP naredbe

• Praznine (Prazan/neispunjen beli prostor)

• Komentare

Ukoliko neka stranica sadrži PHP skriptu, trebalo bi da nosi ekstenziju .php, kako bi webserver bio obavešten. U PHP datoteci blok koji je okružen HTML oznakom (tagom) <?php započetak i oznakom ?> za kraj, smatra se PHP kodom i izvršava se pomoću PHP interpretera.PHP interpreter potpuno ignoriše prazan prostor između naredbi, a kraj svake naredbe obeleženje osnakom ;. Ostatak teksta koji se nalazi izvan ovih tagove, smatra se standardnim tekstomkoji je samo potrebno ispisati na izlaz, bez prethodnog interpretiranja.Sledi primer najjednostavnijeg programa, koji ima za zadatak jednostavno ispisivanje tekstualnogsadržaja na ekran.Ukoliko na ekranu želimo da jednostavno napišemo Zdravo svete, to možemo učiniti veomajednostavno. Koristićemo gore navedeni tag <? php za početak i tag ?> za kraj php dokumenta.Za ispis teksta na stranici koristićemo naredbu (funkciju) echo, nakon koje po znacima navodanavedemo tekst koji želimo da ispišemo na ekranu. Kod će izgledati:

<?phpecho "He l lo World ! " ;

?>

Što se tiče promenljivih (varijabli) u jeziku PHP, one su predstavljene pomoću znaka $iza koga sledi ime promenljive. Pri kreiranju promenljive nije neophodno zadavati joj početnuvrednost, iako se to preporučuje zbog preglednosti.PHP je slabo tipiziran jezik, pa nema potrebe za kreiranjem, uništavanjem i menjanjem tipapromenljive. Drugim rečima, promenljive se ne deklerišu već se njihov tip određuje prema vred-nostima koje im se dodeljuju tokom programa, pa je moguće više puta u toku programa promenititip promenljive. Evo primera deklarisanja promenljivih:

<?php$a = 1 . 2 ;$b = 2 ;$b = $a + $b ; # $b ce b i t i r ea lan b ro j c i j a j e v renos t 3 .2

?>

7

Page 9: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Osim dodeljivanja vrednosti implicitno, promena tipa promenljive se može izvršiti eksplict-nom konverzijom, tako što se ispred znaka $ u zagradama napiše tip promenljive, na sledećinačin:

<?php$a = 1 . 2 ;$b = 2 ;$b = ( i n t ) $a + $b ; # $b dob i j a vrednos t 3

?>

Što se tiče operatora dodele, operatora poređenja i logičkih operatora, PHP koristi sintaksukakvu poznajemo iz C-ovskih jezika. Takođe i ovde važe ista pravila prioritetnosti operacija iasocijativnosti.

2.4 Upravljačke strukture u PHP-u

Zasebne upravljačke strukture, takozvani blokovi, se u programskom jeziku PHP definišu izmeđuvitičastih zagrada { i } . Jedna od osnovnih upravljačkih struktura je uslovno grananje (ifstruktura) koja u PHP-u izgleda kao i u C-ovskim jezicima. Opšti kod koji realizuje uslovnogrananje u PHP-u je:

i f ( u s l ovn i_ i z raz ){

blok_naredbi_1 ;}else{

blok_naredbi_2 ;}

Pored uslovnog grananja, postoji takozvano višesmerno grananje poznatije kao switch. Ovajvid grananja se koristi kada je potrebno jednu istu promenljivu ili izraz uporediti sa različitimvrednostima i u zavisnosti od rezultata poređenja izvršiti neku zadatu akciju. U tom slučajuumesto mnogobrojnog korišćenja if-else grananja, bolje je pribeći korišćenju switch strukture.

Opšti primer primene switch strukture je:

switch ( i z r a z ){

case "vrednost_1" :blok_naredbi_1 ;

. . .case "vrednost_n" :

blok_naredbi_n ;default :

podrazumevani_blok_naredbi ;}

8

Page 10: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Takođe i while petlja ima isti oblik kao što je to u C-ovskim jezicima. Uslov za ponavljanjese nalazi na vrhu, a ukoliko želimo da petlja bude beskonačna onda možemo koristiti sintaksuwhile(1).U opštem slučaju while petlja ima sledeći oblik:

while ( u s l ovn i_ i z raz ){

blok_naredbi ;}

Kada se govori o while petlji, obično se ne izostavlja i njen specijalni slučaj do-while petlja.Uslov do-while petlje se ispituje na kraju svake iteracije i blok naredbi će se izvršiti makar jednom,čak i kada uslov nije ispunjen ni u prvoj iteraciji. Do-while petlja ima sledeći oblik:

do{

blok_naredbi ;}while ( u s l ovn i_ i z raz )

Kao i u ostalim programskim jezicima, i ovde je moguće realizovati for petlju. Ukoliko želimoda for petlja bude beskonačna, onda ona ima for (;;) oblik.U opštem slučaju njena sintaksa je:

for ( i n i c i j a l i z a c i j a _ b r ; ogranicenje_br ; inkrement i ranje_br ){

blok_naredbi ;}

U prethodnom primeru sa br je označen brojac.

Valja napomenuti i još jednu petlju - foreach, koja je specijalna varijacija for petlje na-menjena za rad sa nizovima i drugim objektima. Ona prolazi celim nizom i u svakom trenutkuvrednost elementa smešta u promenljivu.Struktura foreach petlje je:

foreach ( n i z as vrednost ){

blok_naredbi ;}

9

Page 11: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

2.5 Klase i objekti u PHP-u

Objektno orijentisano programiranje koristi objekte kao osnovu za projektovanje i razvoj pro-grama i različitih aplikacija. Rešavanje problema primenom objektno-orijentisanog programi-ranja je vrlo slično ljudskom načinu razmišljanja i organizovanju poslova u svakodnevnom životuljudi. Potrebno je dizajnirati objekte tako da kao jedinke, a i u interakciji sa drugim objektimadovode do rešenja određenog problema. Interakcija među objektima se sastoji u njihovoj među-sobnoj razmeni poruka. Određena poruka je usmerena ka određenom objektu i ona aktivira sveoperacije koje taj objekat definiše, čime se rešava deo po deo složenog problema. Na ovaj načinse postiže da je kod kompaktan, efikasan, lako čitljiv i jednostavan za održavanje. Kod ovakodobro napisanog koda ažuriranje (promene) možemo izvršiti na jednom mestu, umesto da naviše različitih lokacija moramo vršiti izmene. Upravo ova osobina je jedna od vodećih prednostiobjektno-orijentisanog u odnosu na proceduralno programiranje.

Objektno-orijentisano programiranje (skraćeno OOP) bazirano je na strukturama podatakakoje se nazivaju objekti. Međutim, pre nego što se definiše termin objekta, potrebno je definisatitermin klase.Klasa predstavlja šablon (nacrt) iz koga se objekti kreiraju. Klasa se deklariše jednom i pred-stavlja grupu sličnih objekata. Sa druge strane, objekat predstavlja instancu klase i može sekreirati mnogo puta u toku izgradnje programa.

Na primer, klasu možemo zamisliti kao detaljni plan neke kuće, dok objekat možemo zamislitikao kuću koja je izgrađena po detaljnom planu (kuća tj. objekat je detaljno izgrađena po nacrtutj. po šablonu klase). Ovakvih kuća (objekata) može biti mnogo. One su sve napravljene poistom planu ali svaki vlasnik kuće svoju kuću može urediti na željeni način, tako da kuće nemoraju biti identične. Na primer, kuće mogu biti različitih boja, mogu imati različit nameštajili su im dvorišta različito uređena. Ove razlike u uređenju kuća su zapravo podaci i funkcije(metode) u klasi.

Kao i u većini programskih jezika, tako i u programskom jeziku PHP, kreiranje klase se vršipomoću rezervisane reči class.Na primer, ukoliko želimo da kreiramo klasu Kuća mi to možemo uraditi na sledeći način:

<?phpc l a s s Kuca{

// . . .}

?>

Pošto smo kreirali klasu, kreiranje objekta klase (instance klase) se vrši pomoću ključne rečinew, iza čega se navodi naziv klase. U nekim programskim jezicima se nakon imena klase navodezagrade, ali ovde to nije slučaj, pa navodimo samo ime klase.

Objekat klase definišemo željenim imenom promenljive. Promenljivu deklerišemo na načinkako je to bilo opisano u prethodnom poglavlju, pa će kreiranje objekta izgledati:

$objekat = new ImeKlase ;

10

Page 12: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Odnosno, primenjeno na našem primeru to će biti:

$kucaBr1 = new Kuca ;$kucaBr2 = new Kuca ;

Svaka klasa može sadrati svoje članove. Članovi klase mogu biti:

• Svojstva (atributi)

• Operacije (funkcije/metode)

Klasa i članovi klase mogu imati sledeća prava pristupa:

• public - dostupni su svima van klase (pristup njima je podrazumevan)

• protected - dostupni su funkcijama unutar klase i u klasama koje su izvedene iz posma-trane klase, a nisu dostupne klasama i funkcijama koje su van navedenih struktura.

• private - dostupni su samo funkcijama koje su članice klase

Rad sa atributima u klasama je gotovo isti kao i rad sa promenljivama u proceduralnomprogramiranju. Razlika je u tome što se može raditi samo sa onim atributima koji su dodeljeniobjektu i može im se pristupati samo kroz objekat.S obzirom na to da može postojati više objekata koji su nastali iz iste klase, a u svakom odnjih se može nalaziti svojstvo sa istim imenom, bitno je naglasiti o kom tačno objektu i komnjegovom svojstvu se pristupa. U PHP-u se koristi oznaka -> da bi se definisalo kom objektu ikom svojstvu se pristupa.

<?phpc l a s s Kuca{

pub l i c $brojKuce = "1a" ;}$kucaBr1 = new Kuca ;echo $kucaBr1−>brojKuce ;

?>

Operacije u klasama se najčešće definišu kao klasične funkcije u PHP-u. Definisanje funkcijase vrši pomoću ključne reči function. Funkcija mora imati svoje ime i može imati ni jedan,jedan ili više parametara. Ukoliko za neki od parametara želimo da bude opcioni, on se moranalaziti na kraju liste prosleđenih parametara. Bitno je napomenuti da prilikom biranja imenafunkcije, treba poštovati ista pravila koja važe i za imena promenljivih, sa razlikom da se kodfunkcija ne razlikuju mala i velika slova i da se ne piše znak $ ispred naziva funkcije. Takođe imefunkcije ne mogu biti već iskorišćena imena postojećih funkcija, osim ako se istoimena funkcijane nalazi u nekom spoljnom folderu, o čemu će biti više reči u predstojećem tekstu.Rezultat rada funkcije se vidi nakon što se funkcija eksplicitno pozove u nekom delu programa.Funkcija se može pozvati iz nekog drugog dela skripte ili može rekurzivno pozivati samu sebe.Iako nije neophodno, preporučuje se da funkcija bude već deklarisana pre njenog poziva.

Pri pozivu funkcije bitno je voditi računa o redosledu argumenata koji se prosleđuju funkciji.Redosled argumenata, koji se navode u pozivu, treba da odgovara redosledu parametara u

11

Page 13: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

deklaraciji funkcije. Nije neophodno da broj elemenata iz liste argumenata bude jednak brojuelemenata iz liste parametara. Ako je broj argumenata koji se prosleđuju funkciji manji i ne-maju unapred dodeljenu vrednost, nedostajaćim promenljivama se dodeljuje vrednost null. Iakoće ovom prilikom doći do greške, funkija će se ipak izvršiti sa dodeljenim null vrednostima.

Kada se izvršavanje funkcije završi, tok programa se nastavlja tačno od onog mesta odakle jefunkcija pozvana. Izvršavanje funkcije može da se prekine pošto se prođe kroz celu funkciju ili setok izvršavanja može prekinuti u bilo kom delu izvršavanja funkcije primenom naredbe return.Ovo je naredba za povratak iz funkcije i može postojati jedna ili više ovakvih naredbi u okvirujedne funkcije.

Evo primera kreiranja funkcije pozdrav() kojoj se ne prosleđuje ni jedan argument i koja nevraća ništa, već ima za zadatak da ispisuje tekst upotrebom ugrađene funkcije echo.

<?phpc l a s s Kuca{

pub l i c $brojKuce$ = "1a" ;

func t i on pozdrav ( ) {echo "Dobrodos l i ! " ;

}}$kucaBr1 = new Kuca ;$kucaBr1−>pozdrav ( ) ;

?>

U sledećem primeru videćemo kako možemo proslediti promenljivu funkciji i ispisati prosleđenuvrednosti pomoću naredbe echo. U pozivu ovakve funkcije, moramo proslediti potrebne parame-tre, kako bi se program nesmetano izvršio. Kao rezultat biće ispisan tekst: "Dobrodosli u ulicuKraljevica Marka".

<?phpc l a s s Kuca{

pub l i c $brojKuce = "1a" ;

func t i on pozdrav ( $u l i c a ) {echo "Dobrodos l i u u l i c u " . $u l i c a . " ! " ;

}}$kucaBr1 = new Kuca ;$kucaBr1−>pozdrav ( " Kra l j e v i c a Marka" ) ;

?>

Ukoliko želimo da vratimo neku vrednost iz funkcije, to možemo učiniti ranije pomenutomnaredbom return. Bitno je obratiti pažnju da se u ovom slučaju tekst neće ispisati pri pozivufunkcije, jer funikcija nema zadatak da ispiše neki tekst, već ima zadatak da samo vrati određeni

12

Page 14: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

tekstualni sadržaj. Ukoliko sadržaj funkcije želimo da ispišemo na ekranu, onda pre pozivafunkcije treba iskoristiti naredbu echo i to na sledeći način:

<?phpc l a s s Kuca{

pub l i c $brKuce = "1a" ;

func t i on pozdrav ( $u l i c a ) {re turn "Dobrodos l i u u l i c u " . $u l i c a . " ! " ;

}}$kucaBr1 = new Kuca ;echo $kucaBr1−>pozdrav ( " Kra l j e v i c a Marka" ) ;

?>

Kao i u većini drugih programskih jezika, i PHP-u se može pristupiti trenutnom objektu. Tose vrši korišćenjem ključne reči $this-> iza koje sledi naziv atributa kome pristupamo.

<?phpc l a s s Kuca{

pub l i c $brKuce = "1a" ;

func t i on pozdrav ( $u l i c a ) {re turn "Dobrodos l i u u l i c u " . $u l i c a . " bro j " . $ th i s−>brKuce$ ;

}}$kucaBr1 = new Kuca ;echo $kucaBr1−>pozdrav ( " Kra l j e v i c a Marka" ) ;

?>

2.5.1 Statičke promenljive i metode

Statičke promenljive se mogu inicijalizovati na tačno jednom mestu u klasi i one su zajedno sastatičkim metodama zajedničke za sve objekte neke klase. Statičke metode se mogu pozivati izobjekta neke klase, ali se mogu pozivati i samostalno tako što se pre metode navede ime klase sadve dvotačke: ImeKlase::Pozivanje statičkih svojstava i metoda unutar klase je oblika:

s e l f : : s v o j s t vo ;s e l f : : metoda ( ) ;

Dok je pozivanje statičkih svojstava i metoda izvan klase oblika:

ImeKlase : : s vo j s t vo ;ImeKlase : : metoda ( ) ;

13

Page 15: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

2.5.2 Konstruktori

Konstruktori služe za pravljenje novih objekata. Konstruktor se definiše isto kao i druge funkcije,samo što njegovo ime mora biti identično imenu njegove klase. Konstruktori omogućavaju da seprilikom kreiranja objekta istovremeno izvrši inicijalizacija atributa u objektu.Ukoliko se podacima pristupa van klase, poželjno je napisati pristupne funkcije set() i get().

<?phpc l a s s Kuca{

pub l i c $u l i c a ;

pub l i c func t i on Kuca( $u l i c a ) {$th i s−>u l i c a = $u l i c a ;

}pub l i c func t i on s e tU l i c a ( $u l i c a ) {

$th i s−>u l i c a = $u l i c a ;}pub l i c func t i on ge tU l i c a ( ) {

re turn $th i s−>u l i c a ;}

}?>

Od verzije PHP 7.0 prethodno navedena sintaksa se smatra zastarelom i prevaziđenom. Novanotacija pisanja konstruktora klase je _construct(), što bi u primeni izgledalo:

<?phpc l a s s Kuca{

pub l i c $u l i c a ;f unc t i on _construct ( $u l i c a ) {

$th i s−>u l i c a = $u l i c a ;}

}?>

14

Page 16: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

2.5.3 Nasleđivanje klasa

Nasleđivanje predstavlja baziranje objekta ili klase na nekom drugom objektu, koristeći imple-mentaciju nasleđenu od baznog objekta ili klase. Nasleđivanje klasa u PHP-u se definiše ključnomreči extends. Ukoliko je klasa Visespratnica naslednica klase Kuca, tada će kod izgledati ovako:

<?phpc l a s s Kuca{

pub l i c $u l i c a ;pub l i c $brojKuce ;pub l i c func t i on Kuca ( ) {

echo "Kuca j e kre i rana<br/>" ;}

}

c l a s s V i s e sp ra tn i c a extends Kuca{

pub l i c $brojSpratova ;

func t i on op i s ( $u l i ca , $brojKuce , $bro jSpratova ){$th i s−>u l i c a = $u l i c a ;$ th i s−>brojKuce = $brojKuce ;$ th i s−>brojSpratova = $brojSpratova ;echo $th i s−>u l i c a . " " . $ th i s−>brojKuce .

" ima spratova : " . $ th i s−>brojSpratova}

}

$ t r o sp r a tn i c a = new Vi s e sp ra tn i c a ( ) ;$ t r o sp ra tn i ca−>op i s ( " Kra l j e v i c a Marka" , "bb" , "3" ) ;

?>

U prethodnim primerima je kod koji pripada klasama, kao i kod za kreiranje objekata bioprikazivan u okviru jedne PHP strane. Međutim, ovo je veoma loša praksa u programiranju.Uobičajeno je da se ovi delovi koda pišu odvojeno, i da se klasa piše u posebnom fajlu, koji se popotrebi uključuje u druge PHP stranice, koje ta klasa treba da koristi. Kod klase treba staviti uposeban php fajl koji možemo nazvati naziv_klase.php i po potrebi taj fajl možemo uključivatiu druge PHP stranice. Priključivanje neke klase nekoj stranici se vrši u head sekciji stranice kojanasleđuje klasu.

<?phpinclude ( " c l a s s \_naziv\_klase . php" ) ;

?>

15

Page 17: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

3 MVC (Model View Controller) arhitektura

Dizajniranje dobrog softvera je zahtevan zadatak. Postoji mnogo aspekata jedne složene ap-likacije i kvalitetan softver treba na svaki od tih aspekata adekvatno i kvalitetno da odgovori.Neki od kriterijuma koje treba zadovoljiti su:

• Dizajn aplikacije takav da privuče potencijalnog korisnika

• Logika aplikacije koja treba da omogući praktičnu implementaciju složenih zahteva

• Mogućnost jednostavnog unapređivanja aplikacije

• Mogućnost jednostavnog ispravljanja grešaka

Softver takođe treba biti dizajniran tako da odgovara na veliki broj zahteva, treba biti dobrogeneralizovan za laku implementaciju novih funkcionalnosti, treba biti lak za održavanje, brz iefikasan.U nestruktuiranim aplikacijama navedeni zadaci nisu jasno i dobro podeljeni, pa promena najednom delu aplikacije može znatno uticati na ostale delove u aplikaciji. Da bi se sprečili navedeniproblemi, za dizajn se koriste strukturalni šabloni.U poslednjoj deceniji Model View Controller (skraćeno MVC) je najčešće korišćen obrazac(šablon) u svetu web programiranja. U nekim izvorima MVC arhitektura se može naći podnazivom Model Pogled Kontroler, što se skraćeno zapisuje u obliku MPK. Ovaj obrazac opisujenačin struktuiranja aplikacije i u njegovoj osnovi nalaze se dve centralne ideje:

• Ponovno korišćenje već postojećeg koda - Omogućava da se jednom napisan kod bezizmena ili uz minimalne izmene može koristiti u više različitih projekata

• Jasna raspodela zaduženja među različitim delovima sistema - podela sistemana više različitih, međusobno nezavisnih, celina od kojih svaka ima svoj zadatak i kojese pojedinačno mogu modifikovati, bez bojazni da će se te promene odraziti na ostataksistema

Kao što je već rečeno, MVC se koristi za odvajanje pojedinih delova i komponenti aplikacijeu zavisnosti od njihove namene. Svaki deo aplikacije ima svoju odgovornost i pri tome se nalaziu direktnoj ili indirektnoj interakciji sa ostala dva dela sistema. Ovime je rešen problem organi-zacije koda, olakšan je nezavisan razvoj delova, testiranje i održavanje aplikacije. Na opisan načinolakšan je posao programerima jer menjanje jednog sloja aplikacije ne mora nužno promeniti iostala dva sloja.Jedan od prikaza MVC arhitekture se nalazi na narednoj slici.

Slika 2: MVC arhitektura

16

Page 18: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

3.1 Popularizacija Model View Controller arhitekture

MVC arhitektura je široko prihvaćena kao patern za aplikacije u mnogim zvaničnim programskimjezicima i mnogim radnim okruženjima. Ona predstavlja jednu od najčešće korišćenih arhitek-tura današnjice u web programiranju. Ovaj šablon se koristi kako bi struktura aplikcije bilastabilnija, sigurnija i veoma jednostavna za nadogradnju i kasnije proširenje aplikacije.MVC arhitektura je razvijena još krajem 70-ih godina prošlog veka. Do njene popularizacijedovela su dva najpopularnija razvojna okruženja u web programiranju, a to su Ruby on Rail iStraus. Ova dva okruženja su utabala staze mnogim drugim danas popularnim okruženjima kojakoriste MVC strukturu u razvoju web aplikacija.Popularna MVC okruženja (engl. frameworks) današnjice su:

Simfony je okruženje otvorenog koda (engl. open source) namenjenoizradi web aplikacija. Kod ovog okruženja pisan je u programskomjeziku PHP. Prva verzija ovog okruženja, zvanično je objavljena 22.oktobra 2005. godine, a idejni tvorac i autor je bio programer FabienPotencier. Symfony ima MIT licencu i od trenutka pojavljivanja njegovapopularnost je u porastu.Njegove prednosti su: bogat sadržaj (bogatstvo resursa), profesionalnapodrška velike i aktivne zajednice, laka prepoznatljivost, stabilnost,brzina u radu, fleksibilnost, mogućnost ponovne upotrebe komponenti,zavidna produktivnost, korišćenje delova sopstvenog softvera bezkorišćenja celog framework-a i tako dalje.

Zend je takođe PHP okruženje otvorenog koda stvoreno sa ciljemjednostavnog stvaranja i održavanja velikih aplikacija i servisa. Prvi putse u javnosti pojavio 3. marta 2006. godine i razvija ga grupacija podimenom Zend Technologies.Prednosti ovog framework-a su: potpuno korišćenje objektno-orijentisane strukture, komponente gotovo da nemaju nikakvu među-sobnu zavisnost, olakšano upravljanje podacima iz baze podataka, velikibroj gotovih komponenti (komponente koje implementiraju većinuposlovne logike) što smanjuju vreme razvoja aplikacije i tako dalje.

CodeIgniter je kao i prethodna dva, okruženje otvorenog koda pisanou PHP programskom jeziku.. Ugledao je svetlo dana 28. februara2006. godine, od kada je dobijao brojne pohvale tokom svog razvoja.CodeIgniter ima MIT licencu i trenutno ga razvija tim sa BritishColumbia Institute od Technology.Prednosti ovog okruženja su: jednostavna i laka konfiguracija, visokeperformanse, velika zajednica korisnika, jednostavnost korišćenja,pogodnost izrade velikih aplikacija, mogućnost povezivanja sa velikimbrojem baza podataka, mogućnost povezivanja sa više baza podataka uokviru jedne aplikacije, odlikuje ga dobra dokumentacija i visok kvalitetkodiranja. Loša strana ovog okruženja je slaba podrška objektno-orijentisane strukture.

17

Page 19: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

CakePHP takođe predstavlja okruženje otvorenog koda koje je razvi-jeno u PHP-u. U javnosti se prvi put pojavio aprila 2005. godine.CakePHP ima MIT licencu, a razvija ga zajednica pod imenom CakeSoftware Foundacion.Njegove prednosti su: pruža proširivu arhitekturu za razvoj, održavanjei implementaciju programa, poseduje dobru dokumentaciju, olakšanaje komunikacija korisničkog interfejsa sa bazom podataka, brz je, fokusje na objektno-orijentisanoj arhiteturi, jednostavan je za korišćenje iautomatski izvršava akcije. Mane ovog okruženja su: manjak fleksibil-nosti, teško je unositi veće promene bez menjanja samog izvornog kodakomponenti i nije pogodan za aplikacije koje zahtevaju česte promene.

Yii je objektno-orijentisano okruženje, otvorenog koda koje se takođezasniva na MVC arhitekturi. Yii je akronim za sentancu "Yes It Is!".Njegova prva verzija se u javnosti pojavila oktobra 2006. godine, aliprva stabilna verzija je objavljena decembra 2008. godine.Yii je jedno od najbržih PHP okruženja zahvaljujući korišćenju lazyloading tehnike učitavanja. Yii odlikuje opširna i iscrpna dokumentacija,kao i velika zajednica programera.

Phalcon okruženje je objavljeno 2012. godine, kao framework otvorenogkoda, baziran na MVC arhitekturi. Phalcon je pisan u C i C++ pro-gramskim jezicima. Iako je napisan pomoću ovih jezika, za njegovuupotrebu nije potrebno znanje programskog jezika C, jer funkcionišepomoću PHP klasa koje su unapred spremne. Takođe omogućena je iupotreba objekata u aplikaciji (objektno-orijentisani pristup).Njegovi ciljevi su: povećanje brzine izvršavanja koda, smanjenjepotrebnih resursa, povećanje efikasnsti (rešavanje više HTTP zahtevau sekundi) i korigovati manu da je veoma teško savladavanje ovogframework-a.

Na posletku, Laravel okruženje je prvi put objavljeno u junu 2011.godine, a njegov idejni tvorac je programer Taylor Otwell. Okruženjeje razvijeno sa ciljem olakšanog i ubrzanog razvoja web aplikacija. Za-snovano je na MVC arhitektuiri i smatra se jednim od najpopularnijihokruženja današnjice.O ovom radnom okruženju će detaljnije biti reči u narednim poglavljima.

18

Page 20: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

3.2 Model View Controller arhitektura kod web aplikacija

Suština MVC strukture je razdvajanje prezentacionog sloja aplikacje od njene logike. Više osvakoj od komponenata i njihovoj međusobnoj interakciji biće reči u narednim poglavljima, anjihove suštinske uloge su:

• View (Pogled) ili prezentacijski sloj aplikacije je interfejs koji korisnik vidi i koji obezbeđujeinterakciju sa korisnikom. On obuhvata sve elemente interfejsa i može neposredno da čitapodatke iz modela.U web aplikacijama View sadrži: HTML, CSS, JavaScript, XML, JSON i tome sličnefajlove. Korišćenje ovih fajlova se ne preporučuje u kontroleru.

• Model predstavlja logiku aplikacije. To su podaci i strukture pomoću kojih aplikacija vršioperacije. On obuhvata objekte i podatke domena, ali ne zna ništa o korisničkom interfejsujer teži ka razdvajanju prezentacije i sadržaja. Drugim rečima rečeno u MVC strukturiModel ne zna za postojanje View-a, i obrnuto, View ne zna za postojanje Modela.

• Controller ima ulogu koordinatora. U web aplikacijama to je prvi sloj koji se poziva kadapretraživač pozove URL adresu. Svaki web zahtev dolazi direktno do odgovarajućeg kon-trolera. Kontroler na osnovu modela generiše odgovarajuće podatke, prosleđuje ih pogledui na kraju korisniku (web pretraživaču) vraća odgovarajući pogled.

Na predstojećoj slici se nalazi jedna od arhitektura MVC aplikacije (Videti sliku 3). Bitnoje obratiti pažnju da pogled i kontroler zavise od Modela, dok je Model nezavisan i od Viewkomponente i od Controller komponente. Ova nezavisnost Model komponente je veoma bitna jeromogućava da komponenta bude razvijena i testirana nezavisno od prezentacijske logike (neza-visno od pogleda, View-a). Više o funkcionisanju MVC arhitekture biće reči u poglavlju 2.5Interakcija komponenata u MVC arhitekturi.

Slika 3: MVC arhitektura i komunikacija među komponentama

19

Page 21: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

3.3 Model

Model predstavlja stanje sistema i sadrži glavne programske podatke kao što su informacije oobjektima iz baze podataka. Sva poslovna logika aplikacije se nalazi u modelu i svi podaci sedobijaju iz modela. Postoji nekoliko načina kojima je moguće stvoriti kostur modela i u svakomod njih je potrebno uzeti u obzir veze među tabelama u bazi podataka tj. veze među modelimau aplikaciji.Model nije moguće direktno pozvati. Njegov poziv se vrši preko kontrolera, koji od modelazahteva neke podatke. Model potom obrađuje zahteve koje je dobio od kontolera, vraća mupodatke i kontroler ih dalje prosleđuje pogledu koji ih interpretira krajnjem korisniku.Model predstavlja jednu ili više klasa sa svojim stanjima. Ova stanja može menjati kontroler, amogu se i prikazati na zahtev pogleda.Postoje dve vrste modela:

• Pasivan model - Model čije se stanje menja sa učešćem kontrolera (videti sliku 4). Ovo jeslučaj kod jednostavnijih modela gde nije nužna interakcija modela sa pogledom i upravl-jačkim delom.

Slika 4: MVC arhitektura pasivnog modela

• Aktivan model - Model čije se stanje menja bez učešća kontrolera (videti sliku 5). Ovoje slučaj kod modela čije se stanje češće menja i potreban je brz odziv pogleda (odaklezaključujemo da je potrebna interakcija između modela i pogleda).

Slika 5: MVC arhitektura aktivnog modela

U praksi je češći scenario u kome model ima aktivnu ulogu i predstavlja deo poslovne logike. Utom slučaju, model obezbeđuje metode koje će koristiti kada se ažurira trenutno stanje objekta.Model takođe može obavestiti pogled da je došlo do promene, da bi se osvežio trenutni prikaz.

20

Page 22: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

3.4 Pogled (View)

Pogled ili View je poslednji sloj MVC arhitekture koji sadrži korisničko okruženje aplikacije. Onobezbeđuje različite načine za prezentovanje podataka koje dobija od modela. Korisnik moževideti ono što pogled prikazuje, dok su model i kontroler skriveni od oka korisnika.Pogled omogućava korisniku da menja podatke. Sve što korisnik vidi i sa čime može da uspostaviinterakciju smešteno je unutar Pogleda. Na primer to mogu biti razne forme za unos, tabelepodataka, slike i tome slično. Često se koristi i kombinacija nekoliko View-a (pogleda) unutaristog zahteva. Ovaj vizuelni prikaz modela sadrži razne metode za prikazivanje. Može bitiodgovoran za prikazivanje jednog ili više objekata iz modela i njegov posao se završava kada supodaci prikazani korisniku. Dakle, pogled nije odgovoran za smeštanje podataka u bazu, on jesamo odgovoran za njihovo prikazivanje i omogućuje menjanje istih. Model je taj koji ima zazadatak smeštanje podataka u bazu.

3.5 Kontroler (Controller)

Kontroler predstavlja komponentu koja sadrži glavne mehanizme za kontrolu programa i odgov-oran je za njegov tok. U web aplikacijama to je prvi sloj koji se poziva kada pretraživač pozoveURL adresu. Takođe, kontroler upravlja korisničkim zahtevima. To mogu biti HTTP GET iliPOST zahtevi koji se okidaju kada korisnik klikne na neki GUI (Graphical User Interface) el-ement aplikacije. Najčešće kontroler poziva određeni model i zatim bira odgovarajući pogled,interpretira ulazne podatke korisnika i prosleđuje ih do modela ili pogleda.Kao što je već bilo reči, kontroler je taj koji odlučuje kako model treba da se promeni i koji pogledtreba da se koriti. On je posrednik između pogleda i modela i ima "svest" o njihovom posto-janju. Jednostavnije rečeno, kontroler je spona između modela i pogleda, omogućuje njihovumeđusobnu komunikaciju.

3.6 Interakcija komponenata u MVC arhitekturi

Osim podele u tri komponente, MVC arhitektura omogućava i interakciju između prethodnonavedenih komponenti. Komponente u MVC arhitekturi mogu biti povezane na različite načine.Povezanost komponenti diktira njihovu interakciju, a veze se kreiraju u zavisnosti od aplikacijei njenih potreba. Na slikama 3, 4 i 5 prikazane su različite vrste interakcija između modela,pogleda i kontrolera.Iako se povezanost komponenti može razlikovati od slučaja do slučaja, ipak postoje koncepti(pravila) koje treba ispoštovati.Model predstavlja centralnu komponentu i on ne mora da zna ko su kontroler i pogled. On direk-tno upravlja podacima, logikom i pravilima aplikacije. Njegov zadatak je i skladištenje podatakakoji se preuzimaju od strane kontrolera i prikazuju se u pogledu. Kada god dođe do promene,kontroler šalje modelu zahtev za ažuriranjemKontroler prihvata zahteve od strane klijenta koji zahteva neku od operacija. Zatim kontrolerpoziva tu operaciju u modelu i ukoliko model promeni stanje, kontroler obaveštava pogled opromeni stanja modela. U opštem slučaju kontroler može modelu poslati i sam zahtev zapromenom stanja bez da je dobio naredbu od strane pogleda.Pogled od modela traži informacije koje će koristiti u generisanju izlaznih podataka. Pogledobezbeđuje i interfejs koji korisniku omogućava da unosi podatke i poziva odgovarajuće op-eracije koje je potrebno izvršiti nad modelom. Pogled korisniku prikazuje stanje modela.

21

Page 23: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

3.7 Prednosti i mane MVC arhitekture

Kao i svi šabloni, i MVC šablon ima svoje prednosti i mane. Pozitivne osobine MVC obrascasu:

• Ponovno korišćenje koda

• Kod je lako testirati, menjati i poboljšavati, bilo da se radi o dokumentaciji.

• Podela sistema na međusobno nezavisne celine

• Model se može prikazati na više načina

• Lakše je dodati novi pogled - Na primer možemo vrlo lako dodati novu internet stranicukoja pokazuje neke podatke

• Interakcija sa korisnikom je jednostavna za izmenu

• Više programera mogu istovremeno raditi na različitim slojevima aplikacije, ali takođemogu i paralelno raditi na istom sloju aplikacije. Paralelni razvoj aplikacije se može lakoorganizovati i samim tim se povećava produktivnost. Ova osobina je naročito bitna jeru današnjici postoje timovi specijalizovani za implementaciju samo određenih delova ap-likacije i pri tome promene koje vrši jedan od članova tima ne smeju uticati na rad ostalihčlanova tima.

Mane MVC obrasca su:

• Previše kompleksna implementacija za razvoj manjih aplikacija. Tako jednostavne ap-likacije nije potrebno dodatno struktuirati na manje delove jer je tako teže razumevatikod.

• Dovodi do pogoršanja dizajna i performansi malih aplikacija

• Usled previše čestih promena modela pogled može biti preplavljen zahtevima za izmenu iti previše česti zahtevi mogu dovesti do kašnjenja

22

Page 24: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

4 Laravel radno okruženje

Laravel je besplatno razvojno okruženje (framework), otvorenog koda (open source), pisanou programskom jeziku PHP. Ovo razvojno okruženje je namenjeno jednostavnom stvaranju irazvoju web aplikacija. Laravel se bazira na ranije pomenutom MVC paternu (videti glavu 2).Ovo je relativno mlado okruženje, ali je u kratkom vremenskom periodu zadobilo veliki brojkorisnika. Trenutno predstavlja jedno od najpopularnijih PHP okruženja, a taj epitet je dobiozahvaljujući svojoj jednostavnosti, jasnim strukturama i detaljnoj dokumentaciji.O popularizaciji ovog, relativno mladog, razvojnog okruženja govori i činjenica da se svake godineodržavaju Laracon konferencije. Po jednom godišnje, u Americi i Evropi održavaju se zvaničnekonferencije pod nazivom Laracon na kojima se prati razvoj i korišćenje Laravel okruženja.Laravel je PHP razvojno okruženje izdato pod MIT licencom i njegov izvorni kod je dostupanna GitHub servisu, a zvanična web stranica se nalazi na adresi laravel.com.

4.1 Istorijski razvoj Laravel okruženja

Programski jezik PHP poslednjih godina doživljava renesansu. Za ovaj pomak su naročito odgov-orna mnogobrojna razvojna okruženja koja su PHP učinala modernim programskim jezikom.Jedno od takvih okruženja je i Laravel. Kreator Laravel framework-a je programer TaylorOtwell koji je završio informacione tehnologije na tehničkom fakultetu u Arkanzasu (engl.Arkansas Tech University), u Americi. Nakon studija je radio u privatnoj programerskoj kom-paniji koristeći .net razvojno okruženje. Međutim, njega je oduvek privačilo web programiranje,pa je u slobodno vreme sam razvijao web aplikacije u programskom jeziku PHP. Kako sam kaže,PHP mu je bio uvek privlačan bog otvorenog koda i jeftine izrade web aplikacija. Pre nego dakreira sopstveno okruženje koristio je CodeIgniter PHP-ovo razvojno okruženje, a njegovi nedo-stati su mu dali motivaciju da kreira razvojno okruženje po svojoj meri. Prvu verziju Laravelaje kreirao i kodirao potpuno samostalno, sa svrhom da sebi stvori pogodno okruženje koje rešavanedostatke do tada najpopularnijih razvojnih okruženja. Nedostaci koji su ga najviše motivisalibili su: nepostojanje ugrađene podrške za autentifikaciju i autorizaciju. Taylor je razvojni pos-tupak ovog okruženja otpočeo na sopstvenoj aplikaciji koristeći koncepte iz .net infrastrukture.Iste godine, u junu 2011. godine, objavio je razvojno okruženje pod nazivom Laravel. Napočetku, Laravel je bio veoma malo razvojno okruženje, i sam njegov tvorac nije očekivao daće tako brzo postati popularno i rado korišćeno PHP razvojno okruženje. Poslednjih godina,Laravel je postalo veliko razvojno okruženje koje svakim danaom raste, ima hiljade korisnika iveoma je popularno za razvoj web aplikacija. Danas, Taylor Otwell sa svojim timom ljudi, radina poboljšanjima Laravela i paralelno radi kao softverski inženjer u kompaniji UserScape koja sebavi web biznisom i učestvuje u razvoju softvera otvorenog koda.

4.1.1 Laravel 1 i Laravel 2

Prva verzija Laravela objavljena je u junu 2011. godine. Imala je ugrađenu podršku za auten-tifikaciju, lokalizaciju, sesije, jednostavni mehanizam za kontrolu toka (routing), keširanje, forme,modele i poglede.

Druga verzija Laravela je objavljena u septembru iste godine. U odnosu na prvu verziju do-data je podrška za upravljače, što je okruženju omogućilo da funkcioniše na pravom nivou MVCarhitekture. Ova verzija je proširena i metodama validacije, obeležavanjem stranica, omogućenoje instaliranje paketa pomoću komandne linije i dodati su mnogoborjni testovi za pojedine kom-ponente razvojnog okruženja.

23

Page 25: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

4.1.2 Laravel 3

U februaru 2012. godine, objavljena je verzija Laravel 3 sa brojnim novim svojstvima. Uovoj verziji uvedena je Artisan komandna linija (engl. Command-line interface), podrška zasisteme koji su namenjeni upravljanju bazama podataka i uveden je sistem pakovanja Bundles.Sa ovom verzijom uočen je značajan rast popularnosti Laravela. Već pet meseci nakon objaveLaravel 3 verzije, tvorci okruženja su odlučili da iznova napišu čitavo razvojno okruženje u oblikugrupe paketa distribuiranih putem Composer-a. Ovime je otpočet razvoj na sledećoj verziji podimenomn Illuminate.

4.1.3 Laravel 4

U maju 2013. godine objavljen je Laravel 4 pod nazivom Illuminate. Ova verzija je bila znatnounapređena, naročito u pogledu arhitekture i mogućnosti nadogradnje. Ovako redizajniranookruženje uvelo je svojstva koja nije nudilo ni jedno drugo do tada poznato razvojno okruženje.Neka od tih svojstava bila su: modularni sistem pakovanja, različiti pristupi relacionim bazamapodataka, inicijalno kreiranje baze podataka i podrška za rad sa e-poštom. Međutim sve ovepromene dovele su do sumnje u verodostojnost okruženja. Naime, deo korisničke zajednice jesmatrao da česte i brojne promene framework-a smanjuju njegovu verodostojnost. Iako često ob-javljivanje novih verzija ukazuje na internzivno razvijanje okruženja, to nekada može opterećivatikorisnike. Korisnike opterećuje stalno prilagođavanje projekta novim verzijama i prilagođavanjepostojećih aplikacija novonastalim izmenama. Tim tempom stalnih promena okruženja, ap-likacije pisane u njemu su postale gotovo neodržive. Takođe, korisnici su pored navedenog tražilii bolju stabilnost sistema.Ovo je tvorce Laravela navelo na razmišljanje i uvedeno je objavljivanje manjih izmena okruženjana svakih 6 meseci. Vremenom su vršene male izmene koda, popravka grešaka, dodata su iobrisana neka svojstva, ali je Laravel 4 konačno postao stabilno i pouzdano razvojno okruženje.

4.1.4 Laravel 5

U februaru 2015. godine objavljen je Laravel 5. U ovoj verziji uveden je paket Scheduler kojiomogućava organizovanje zadataka, unapređeno je upravljanje paketima, pojednostavljeno jerukovanje autentifikacijom i uvedena je nova stablasta arhitektura razvijenih aplikacija.U februaru ove godine objavljena je poslenja stabila verzija Laravel 5.6.

24

Page 26: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

4.2 Komponente Laravela i njihova interakcija

Osnova tipične Laravel aplikacije je MVC arhitektura. Gotovi šabloni poput MVC-a su osmišl-jeni kako bi posao programera bio olakšan.Na narednoj slici, videti sliku 6, vizualizovan je način interakcije komponenti u razvojnomokruženju Laravel. Čitava interakcija počinje od strane korisnika koji sa svog pregledača šaljeneki zahtev. Zahtev koji je poslat prima web server i prosleđuje se Laravel ruteru. Rutirajućimehanizam prihvata ovaj zahtev i preusmerava ga kontroleru. U nekim slučajevima, kontrolerpo obradi informacije odmah prikazuje pogled (odmah vraća HTML stranicu koja se prikazuje).U drugim slučajevima, kod dinamičkih sajtova, kontroler najpre interaguje sa modelom kojije odgovoran za rad sa bazom podataka. Nakon što kontroler dobije odgovor od modela, onpriprema finalni pogled i vraća kompletnu web stranicu korisničkom pregledaču.

Slika 6: MVC arhitektura Laravela

Sve do sada navedene zahteve možemo kompaktinije napisati u vidu sleda od pet događaja,što bi izgledalo:

1. Podnošenje korisničkog zahteva

2. Rutiranje ka odgovarajućem Laravel kontroleru

3. Interakcija sa modelom podataka

4. Prenos podataka sa kontrolera na pogled

5. Prikazivanje pogleda u korisničkom pregledaču

Možemo zaključiti da se Laravel zalaže za koncept da modeli, pogledi i kontroleri trebaju bitisasvim odvojene komponente. Kodovi za svaku od ovih komponenti skladište se kao posebnifajlovi, u odvojenim direktorijumima.

25

Page 27: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

4.3 Prednosti i mane Laravel razvojnog okruženja

Postoji veliki broj PHP razvojnih okruženja za razvijanje web aplikacija, o čemu se više možepročitati u poglavlju 3.1. Iako je u svakom od ovih okruženja moguće razvijati web aplikaciju,pojedina od njih su pogodnija određenoj svrsi od drugih. Na primer, neka okruženja pružajumogućnost korišćenja MVC paterna, neka pružaju podršku za rad sa velikim brojem baza po-datka, neka su objektno-orijentisana i tome slično.Već je u ranijim poglavljima bilo reči o popularnosti Laravel radnog okruženja. U daljem tekstubiće nabrojane neke od prednosti ovog okruženja:

• Opširna i kvalitetna službena dokumentacija koja po statistici sadrži odgovore na9 od 10 pitanja korisnika. Zahvaljujući velikoj zajednici korisnika (koja svakim danomraste), mnogobrojne korisne informacije se mogu naći i na brojnim forumima i sajtovima.Jedna od najpopularnijih ovakvih stranica je Laracast koja donosi brojne praktične primere,objašnjenja i vodiče, uz propratni tekstualni sadržaj, slike i video materijale.

• Jednostavnost za kodiranje i razumevanje naročito privlači veliki broj programerapočetnika. Način na koji je Laravel pisan je veoma intuitivan i struktura samog projekta jevrlo pregledna. Korisnik ima sasvim dovoljno informacija, ali ne previše da bude zagubljeni zatrpan manje potrebnim informacijama.

• Fleksibilnost u izmenama je još jedna od odlika. Svaku isprogramiranu opciju nijeteško izmeniti, bez da narušavamo rad ostatka aplikacije. Ovo je nekada naročito pogodnokada je za rad nekog dela programa potrebno instalirati neki od 9000 paketa i pri tome nenarušiti sklad u ostalim delovima aplikacije.

• Jednostavno praćenje kontrole toka uz pomoć posebnih skripti za praćenje ruta. Razd-vaja logiku HTTP zahteva i pojednostavljuje obrađivanje zahteva.

• Kvalitetna logika za testiranje svih delova aplikacije

• Omogućuje paralelni rad više programera na jednom projektu bez da jedni drugimaometaju rad

Kao i ostala okruženja i ovo okruženje ima neke mane:

• Nekada nedovoljna brzina - Iako Laravel sada koristi Blade koji doprinosi njegovojbrzini, nekada ta brzina ne zadovoljava standarne koje postavljaju neka druga razvojnaokruženja.

• Nova platforma za većinu programera koji jošuvek nemaju vremena ili hrabrosti da pređuna neko novo razvojno okruženje. Odbijanje isprobavanja relativno mladog framework-anaročito ima potporu u prošlosti kada su nove verzije Laravela objavljivane na više puta ugodinu dana, pa je Laravel odao utisak nestabilnog okruženja.

• Jošuvek zajednica korisnika nije dovoljno proširena, međutim svakim danom za-jednica korisnika postaje sve brojnija, pa bi ovaj nedostatak uskoro mogao biti uspešnoprevaziđen.

• Neke metode su dosta kompleksne

26

Page 28: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

4.4 Poređenje Laravela sa ostalim PHP razvojnim okruženjima

PHP okruženja su jednostavniji način korišćenja PHP-a. Razlozi njihovog korišćenja su: povećanjeefikasnosti i sigurnosti, skraćivanje vremena koje je potrebno za razvoj, olakšavanje kodiranja,skraćivanje vremena u kreiranju bazne strukture i omogućavanje ponovnog korišćenje koda gdegod je to potrebno.Međutim, ovde se postavlja pitanje: "Kako odabrati radno okruženje?"Zbog toga, u daljem tekstu sledi statistika u kojoj se u različitim aspektima upoređuju sedamnajpopularnijih okruženja u prethodnoj, 2017. godini.

Ukoliko je za izradu projekta potrebno odabrati što brže radno okruženje, koje ima brz odzivi korisnicima omogućuje izuzetno ugodno korišćenje, onda je odličan izbor odabrati Phalcomframework. Svojom dobro organizovanom strukturom, on će izuzetno brzo i efikasno odgovaratina sve korisničke zahteve. Međutim, ukoliko je potrebno i brzo i lako učenje programskog jezika,onda svakako Phalcom nije dobar odabrir, jer je učenje ovog okruženja vrlo vremenski zahtevnoi kompleksno, naročito za početnike. Stoga i pored velike brzine u radu, ovo okruženje nije navrhu liste omiljenih okruženja za rad.

Slika 7: Brzina rada okruženja u 2017. godini

Ukoliko se odabir okruženja vrši prema lakoći savladavanja framework-a, onda se na vrhuliste nalazi Symfony framework. Ovu zaslugu Symfony pre svega duguje svojoj jednostavnostiu kodiranju i velikoj zajednici programera koji su mu odani. Godinama ima konstantnu popu-larnost i oko 13% svih projekata u PHP-u je napisano u ovom okruženju.Lakoću u učenju podupiru i dobra dokumentacija na zvaničom sajtu, mnogobrojni sajtovi i fo-rumi na kojima se mogu naći brojni tutorijali i rešenja problema u programiranju.Takođe, ukoliko se popularnost okruženja meri prema broju njegovog preuzimanja sa zvaničnestranice, onda je i ovde Symfony na vrhu ove liste. Symfony beleži preko 500 miliona preuz-imanja, što je gotovo duplo više preuzimanja nego ukupno preuzimanje preostalih 6 najpopu-larnijih okruženja današnjice.

Slika 8: Lakoća učenja okruženja prema podacima iz 2017. godine

27

Page 29: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Slika 9: Zvanično preuzimanje framework-a prema podacima iz 2017. godini

Statistika Github-a na vodeće mesto po broju commit-a stavlja CakePHP, prema podacimaiz 2017. godine. CakePHP je najstariji među navedenim jezicima i njegovo dugogodišnje pos-tojanje ga je plasiralo na ovo mesto. Iako danas nije toliko popularan među projektima novijegdatuma, i dalje postoji veliki broj projekata koji su napisani u ovom okruženju i čije održa-vanje zahteva korišćenje ovog jezika. Mlađi i moderniji jezici ga polako potiskuju po mnogimparametrima, ali on ostaje i dalje kao nosilac vodećeg mesta po broju commit-a na Github-u.

Slika 10: Brojnost Github commit-a u 2017. godini

Laravel je najpretraživanije okruženje na najvećem internet servisu, Google-u. Takođe, Lar-avel je okruženje koje ima i najviše pratilaca na popularnoj socijalnoj mreži Twitter-u. Ukolikoje suditi po ovim podacima, onda je sigurno da Laravel svakim danom beleži napredak, da sepovećava njegova popularnost među programerima, samim tim se povećava i broj projekata uovom programskom jeziku, kao i zajednica programera koji ga koriste u svom svakodnevnomradu. Ovakva statistika daje podsticaj razvojnom timu Laravel-a da unaprede njegove perfor-manse, kako bi ovaj framework još bolje kotirao i u ostalim statističkim domenima.

Slika 11: Popularnost pretraživanja na Google-u u 2017. godini

28

Page 30: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Slika 12: Broj Twitter pratilaca u 2017. godini

Kao što možemo videti, svako od navedenih okruženja za rad u PHP-u ima neke prednosti ineke nedostatke. Najbolje je informisati se, a potom odabrati okruženje koje najviše odgovarapotrebama projekta i programera koji će izrađivati projekat.Laravel, Code Igniter, Symfony, Zend, Yii, Phalcon, Cake PHP, Fuel PHP, FatFree,Aura su najpopularnija okruženja u kojima se izrađuje više od 90% projekata (prema podacimaiz 2017. godine). Pored navedenih, postoje i mnoga druga manje popularna radna okruženjau kojima se takođe mogu izraditi kvalitetne aplikacije u PHP-u poput: Fuel PHP, FatFree,Aura i mnogi drugi.

Slika 13: Procentualni prikaz korišćenja PHP okruženja u izradi aplikacija

29

Page 31: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

5 Alati u Laravelu

Da bi udobnost i kvalitet rada u Laravelu bio na još većem nivou, razvijen je i specifičan načinrada koji programerima donosi znatne uštede u vremenu i garantuje da će kod lokalnog razvojnogokruženje raditi jednako dobro i na produkcionom serveru.

Kao što je već poznato, razvojno okruženje Laravel se odlikuje brzim razvojem aplikacije,prečicama, olakšicama kod ponavljanja čestih delova koda i prepoznatljiv je po visokom nivouapstrakcije koji olakšava izradu aplikacija. Ove odlike omogućene su raznim ugrađenim alatima,od kojih će najkarakterističniji biti navedeni u narednim odeljcima. Broj veoma korisnih alatakoji su na raspolaganju Laravel korisnicima se neprekidno uvećava. Bilo da su u pitanju zvanični,komercijalni proizvodi ili rešenja otvorenog koda (engl. open source rešenja), kvalitet i udobnostrada programera se uz ove alate olakšava i poboljšava.

5.1 Composer

Composer je alat koji upravlja zavisnostima u PHP-u. On omogućava deklarisanje bibliotekakoje su potrebne projektu i brine o njihovoj instalaciji i ažuriranju. Bitno je napraviti razlikuda on ne upravlja paketima, već pakete instalira unutar foldera projekta, pri svakom kreiranjunovog projekta. Prilikom preuzimanja paketa moguće je naglasiti koju verziju kog paketa želimoda instalirano, a ukoliko ne naglasimo Composer će se potruditi da instalira verziju za koju onsmatra da nam je potrebna.Composer pakete ne instalira globalno, ali ukoliko prilikom instalacije u komandnoj liniji uku-camo komandu global, onda će paketi biti instalirani na globalnom nivou.Za rad Composer-a neophodno je imati PHP 5.3.2 ili novije verzije, a on se može preuzeti sazvaničnog sajta i veoma jednostavno instalirati na računaru.

5.2 PHP Artisan

PHP Artisan je još jedan od alata koji dolazi u paketu sa Laravelom, tj. dolazi uz njegovuinstalaciju. Artisan predstavlja interfejs komandne linije i omogućuje interakciju između pro-gramera i čitave aplikacije napisane u Laravelu i to putem komandne linije. Ovaj alat pružabrojne komande koje olakšavaju izgradnju aplikacije. Svaka od ovih komadni ima detaljnu doku-mentraciju koja opisuje funkcionalnost, parametre koje je dozvoljeno prosleđivati i ostale opcijekoje ta funkcionalnost pruža. Detaljnije o nekoj komandi se može dobiti tako što se u komandnojliniji ukuca:

php artisan help nazivKomande.

Korisnici sa Laravelom najčešće interaguju upravo preko komandne linije, što Artisan alatudodatno daje na značajnosti. To je najčešći i mnogima najlakši način za generisanje programa injegovo rukovođenje, jer pruža brojne prečice za većinu rutinskih operacija koje bi trebalo raditiručno (na primer pravljanje kontrolera, modela, međusoftvera i tome slično). Artisan može daupravlja svima, počevši od baze podataka, pa sve do upravljanja konfiguracijom.

Artisan se pokreće preko terminala, u Windows-u to mogu biti Command Prompt, WindowsPowerShell i tome slični terminali. Za njegovo pokretanje potrebno je pozicionirati se na folderprojekta, što će nam dati pristup Artisan-u. Svaka njegova komanda počinje u formatu: phpartisan komanda

30

Page 32: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Neke od najčešćih Artisan komandi su:

• php artisan list izlistava dostupne komande

• php artisan cache:clear čisti keš memoriju aplikacije

• php artisan serve pokreće server na portu 8000

• php artisan optimize optimizuje framework radi postizanja boljih performansi

• php artisan make: controller NazivKontrolera pravi novi kontroler

Pored komadni koje dolaze sa PHP Artisian alatom, moguće je pridodati i sopstvene ko-mande. Nova komanda se generiše u app/Console/Commands folderu, a njeno generisanje sevrši unošenjem sledeće naredbe u komandnu liniju:php artisan make:command NazivKomande

5.3 Middleware (Međusoftver)

Middleware je softver koji interaguje između aplikacije i mreže. Pruža mehanizam za filtriranjeHTTP zahteva (korisničkih zahteva) koje aplikacija dobija. Laravel dolazi sa nekim ugrađenimmeđusoftverima, ali pored njih korisnik može sam definisati dodatne međusoftvere za izvođenjeraznih funkcionalnosti.Međusoftveri su smešteni u folderu app/Http/Middleware .

Ukoliko želimo da sami definišemo mađusoftver, to je moguće učiniti pomoću Artisan alatai to na sledeći način:php artisan make:middleware NazivMedjusoftveraNakon izvršenja ove komande u folderu app/Http/Middleware biće kreiran fajl NazivMedjusoft-vera.php sa klasom NazivMedjusoftvera, kao što je prikazano na sledećoj slici:

Slika 14: Kreiran međusoftver u Laravelu

31

Page 33: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Nakon definisanja međusoftvera, treba obezbediti njegovu logiku. Logika je individualna uzavisnosti od toga kakvu ulogu će taj međusoftver imati. Najkarakterističniji primer je među-softver koji presreće i beleži korisniške zahteve, beleži vreme korisničkog pristupa alikaciji, beležiip adresu sa koje je korisnik došao i tome slično.

Middleware sa kojima Laravel dolazi su:

• EncryptCookies - Kolačići igraju važnu ulogu tokom korisničke sesije u web aplikacijama

• RedirectIfAuthenticated - Zadužen je za proveru da li je korisnik aplikacije prošaoautentikaciju

• TrimStrings - Njegova uloga je automatsko brisanje nehotice dodatih razmaka ili praznogprostora

• VerifyCsrfToken (CSRF - Cross-Site Request Forgery) - Ima za zadatak da zaštiti stran-icu od zlonamernih upada. Za svaku korisničku sesiju u aplikaciji Laravel automatski gener-iše token. Ovaj token se koristi kako bi korisnik dokazao da je on taj koji šalje zahteve uaplikaciji.

5.4 Blade

Blade je jednostavan i moćan Laravel alat koji je namenjen za kreiranje, korišćenje i upravljanjesadržajem template-a. Blade nije jazik, već predstavlja način pisanja koda u okviru pogleda(View-a). Svi pogledi u Laravelu se prave uz pomoć Blade-a i nose ekstenziju .blade.php. Ovifajlovi (svi pogledi u Laravelu) su smešteni u okviru foldera resources/views.Iako blade predstavlja način pisanja koda, u okviru Blade-a se može koristiti i klasična sintaksaPHP-a. Razlog tome je taj što se pri kompajliranju Blade prevodi u čist PHP, pa pisanje čistogPHP koda ne ometa njegov rad.

5.4.1 Osnovna sintaksa

Promenljive u blade-u se deklarišu tako što između dvostrukih vitičastih zagrada navodimoznak dolara i ime promenljive, na sledeći način: {{ $ imePromenljive }} .Generalno gledano, Blade ima skraćenu sintaksu za ispis sadržaja i umesto echo dovoljno jenapisati {{ i }}, a sve što je unutar ovih zagrada biće ispisano na izlazu. Nakon štampanjapromenljive se ne stavlja tačka-zarez (;) kao što je to slučaj sa komandama u PHP-u. Vrednostpromenljivih prosleđenih blade view-u se definišu na sledeći način:

r oute s /web . php

Route : : get ( ’ t e s t ’ , f unc t i on ( ){re turn view ( ’ pocetna ’ , [ ’ ime ’=>’ Je lena ’ ] ) ;

) } ) ;

pocetna . blade . php<h1>Unel i s t e ime : {{$ime}}.</h1>

Komentari se u blade-u navode: {{ - - Komentar - - }}

U odeljku 2.4 bilo je reči o naredbama kontrole toka i strukturama u PHP programskomjeziku. Iako logika ovih naredbi ostaje ista, Blade ima specifičan način kodiranja ovih naredbi.

32

Page 34: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Jedna od glavnih karakteristika je ta da umesto otvorene vitičaste zagrade koja označava početakbloka { Blade koristi simbol @ koji se piše ispred naziva naredbe, a za kraj bloka se umestozatvorene vitičaste zagrade } koristi naredba @endNaredba.

Naredba grananja (if naredba) se u Blade-u implementira na sledeći način:

@if ( us lov ). . .

@endif

Ukoliko želimo da imamo višestruko grananje, onda to realizujemo na sledeći način:

@if ( us lov ). . .@ e l s e i f ( us lov ). . .@else@endif

While ciklična struktura ima iste osobine kao i u PHP-u. Takođe se uslov nalazi na vrhu, aukoliko se petlja ponavlja beskonačno, onda se umesto uslova navodi @while(true). U opštemslučaju, while petlja u Blade-u ima oblik:

@while ( us lov )<p> Ovo j e while p e t l j a </p>

@endwhile

For petlja u Blade-u sadrži iterator koji se navodi sa znakom $ kojime se inače navodepromenljive u PHP-u. Kao i regularne for petlje, sadrži inicijalnu vrednost, graničnu vrednost iinkrementaciju i u Blade-u izgleda:

@for ( $ i = 0 ; $ i < 100 ; $ i++)<p>Trenutna vrednost bro jaca j e : {{ $ i }}</p>

@endfor

Foreach petlja je specijalan slučaj for petlje i njena implementacija u Blade-u će izgledati:

@foreach ( $predavac i as $predavac )<p>Id trenutnog predava\v ca j e : {{ $predavac −> id }}</p>

@endforeach

Kao i u regularnom PHP-u i Blade podržava naredbe continue i break, ukoliko želimo daprekinemo rad petlje ili je nastavimo u nekom delu. Ove naredbe se u Blade-u pišu: @ continuei @ break, i uobičajeno se koriste.

Pored navedenih, do sada već viđenih osobina, Blade podržava jednu novinu u odnosu naPHP. U Blade-u postoji naredba $ loop koja je dostupna u telu petlji. Ova naredba sadrži skup

33

Page 35: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

različitih svojstava od kojih su najvažnija:

• $ loop → index vraća indeks trenutne iteracije. Indeksiranje počinje od nule.

• $ loop → iteration vraća indeks trenutne iteracije. Iteriranje počinje od jedan.

• $ loop → remaining vraća broj preostalih iteracija

• $ loop → count vraća ukupan broj elemenata niza kroz koje će se proći

• $ loop → first vraća true ili false u zavisnosti od toga da li je u pitanju prva iteracija ilinije

• $ loop → last vraća true ili false u zavisnosti od toga da li je u pitanju poslednja iteracijaili nije

• $ loop → parent vraća promenljivu $ loop roditeljske petlje, kada su ugnježdene petljeu pitanju

5.4.2 Blade komponente

Blade komponente se koriste kada postoji određeni deo strane koji treba da se ponovi sa različitimsadržajem, na različitim mestima. S obzirom na to da svaka web strana ima svoj kod, vrlo jeverovatno da se neki deo koda poklapa na više strana. Umesto kopiranja koda koji se ponavlja,moguće je definisati komponentu koja će smanjiti njegovo ponavljanje. Ovakav zajednički kodbi valjalo izdvojiti u neki poseban fajl (komponentu), a kasnije taj fajl po potrebi naslediti imodifikovati po želji. Na primer, možda želimo da na svakoj stranici imamo isti meni, pa tukomponentu možemo iskoristiti i prikazati u njoj sadržaj koji joj prosledimo.Ovaj koncept se definiše primenom layout principa. Layout princip je veoma jednostavan i pružabolju preglednost. Sve ovakve kodove možemo čuvati u folderu layouts koji sami napravimo:resources \views \layouts. Templejti koje u ovom folderu budemo smeštali imaće ekstrenziju.blade.php, kao što je to bio slučaj sa svim pogledima.Da bi se definisani kod templejta pojavio kao sastavni deo neke strane, potrebno je naslediti ga(priključiti ga) u željenom dokumentu iz foldera layouts. To možemo realizovati na sledeći način:

@extends ( ’ l ayout s / prviTemple jt ’ )

Kod ovakovog vida nasleđivanja sadržaja nekog layout-a vrlo često se može desiti da sadržajkoji želimo da umetnemo "pobegne" tj, da ne bude integrisan na pravo mesto. Rešenje ovog prob-lema je kreiranje sadržaja tako da dobije dinamičke delove koje možemo porediti sa prazninamakoje je potrebno da popuni neko drugi. Ovakvi dinamički delovi se realizuju pomoću rezervisanereći @ yield(’naziv’) u željenom template-u i pomoću rezervisanih reči @ section(’naziv’)... @ endsection(’naziv’) u konkretnom view-u web stranice. Ovime smo definisali koji će seto sadržaj u konkretnoj web stranici na mestu @ yield(’naziv’) prikazati. Evo jednog primerarealizacije ovakvog umetanja teksta:

prv iTemple jt . b lade . php<html><body>

@yield ( ’ s ad r za j ’ )</body></html>

34

Page 36: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

naslovna . blade . php@extends ( ’ l ayout s / prviTemple jt ’ )

@sect ion ( ’ s ad r za j ’ )<h1> Predavaci </h1><h1> Student i </h1>

@endsect ion ( ’ s ad r za j ’ )

Međutim, ovakvim čestim nasleđivanjem i umetanjem teksta u pojedine delove stranica,može doći do bespotrebnog nagomilavanja koda i izuzetno dugih stranica u kojima je teškosnalaziti se. U ovakvim slučajevima pribegavamo podeli layout-a gde se izdvojeni delovi smeš-taju u posebne fajlove. U tim posebnim fajlovima odvojeni deo koda će biti ograđen blokom@section(’naziv’), a za priključivanje ovako odvojenih sadržaja koristimo rezervisanu reč @in-clude(’naziv’). Ovime postižemo isti efekat, ali skraćujemo kod.

Kao što smo koristili @section i @endsection, tako u Blade-u možemo koristiti i@componenti @endcomponent. Ovakvu komponentu je moguće učitati bez podataka ili joj je mogućeproslediti sadržaj. To se radi tako što se u uglastim zagradama, kao drugi parametar, komponentiprosledi mapa gde je svaki ključ u mapi posebna promenljiva. Tako prosleđeni podaci komponentebiće dostupni komponenti preko promenljivih $ime i $prezime.

@component ( ’ komponenta ’ , [’ ime ’ => " Je lena " ,’ prezime ’ => "Matej ic "

] )@endcomponent

5.5 Eloquent ORM (Eloquet Object Relational Mapper)

Eloquent ORM (prevodi se kao Elokvent Objektno Relaciono Mapiranje) je veoma moćan alatkoji služi za upravljanje bazom podataka. Svaki Eloquent model predstavlja jednu tabelu ubazi podataka i svakoj tabeli dodeljuje jedan model uz pomoć koga se vrši komunikacija sa tomtabelom (zadavanje upita za određene podatke i umetanje novih podataka).Svi Eloquent modeli su zaštićeni od zahteva za slučajnim ili namernim pokušajem unosa neočeki-vanih parametara. Ovakav zahtev može narušiti sigurnost baze podataka, pa je potrebno deklar-isati koje to atribute korisnik može menjati svojevoljno. Naravno, iako korisnik sam unosi po-datke, oni moraju zadovoljavati parametre kojima je deklarisan atribut, u suprotnom doćiće dogreške.Podrazumevano, elementi iz tabele se mogu brisati, izmenjivati i dodavati novi. Moguće je ele-ment brisati ili izmeniti po id-u ili definicijom toga šta želimo da izbrišemo ili izmenimo.

35

Page 37: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6 Osnove Laravel razvojnog okruženja

Sintaksa Laravel okruženja je ista kao sintaksa programskog jezika PHP (više o programskomjeziku PHP možete pročitati u glavi 2 Uvod u PHP ).Laravel ne poseduje početnu (glavnu) funkciju, već sadrži naredbe koje se izvršavaju jedna zadrugom. Naredbe se izvršavaju počevši od prve pa sve do poslednje napisane naredbe koja sesmatra krajem programa.Laravel kod može biti organizovan u funkcije i klase, koje mogu biti organizovane po folder-ima (datotekama). Kao početna datoteka uzima se ona koja je interpretatoru data prva naizvršavanje. Ukoliko datoteka nije navedena, server će automatski pokušati da pokrene datotekuindex.php.Da bi se napravila kompleksna aplikacija u Laravelu potrebno je najpre napraviti putanju (rutu)koja povezuje , omogućava komunikaciju, između modela, kontrolera i pogleda (videti sliku 6).Detaljnije o kreiranju aplikacije u Laravel razvojnom okruženju biće reči u nastavku ovog rada.

6.1 Instaliranje Laravel okruženja i pokretanje projekta

Da bi bila omogućena instalacija Laravela, potrebno je najpre ispuniti sledeće uslove.

Instalirati PHPPotrebno je preuzeti i instalirati najnoviju verziju programskog jezika PHPsa zvaničnog sajta: http://php.net/downloads.php.Bitno je napomenuti da Laravel ne podržava ispod PHP 5.6.4 verzije

Instalirati ComposerPotrebno je preuzeti i instalirati najnoviju verziju Composer-a sa zvaničnogsajta: https://getcomposer.org/download/.Laravel koristi Composer za upravljanje svojim zavisnostima i u komandnojliniji možemo instalirati Laravel uz pomoć Composer-a.

Instalirati neko razvojno okruženjeIako nije neophodno, pogodno je koristiti neko razvojno okruženje ukome ćemo organizovati projekat i omogućiće nam lakši rad i snalaženjeu kodu. Jedno od takvih okruženja je i PhpStorm koji koristimu svom projektu i može se jednostavno preuzeti sa zvaničnog sajta:https://www.jetbrains.com/phpstorm/download/.Laravel koristi Composer za upravljanje svojim zavisnostima i u komandnojliniji možemo instalirati Laravel uz pomoć Composer-a.

Sledeće što treba uraditi je otvoriti terminal Command Prompt ili Windows PowerShell i uzpomoć Composer-a instalirati Laravel komandnom linijom:

composer g l oba l require " l a r a v e l / i n s t a l l e r "

Nakon što se instalacija uspešno završi, možemo napraviti novi Laravel projekat koristećisledeću liniju koda:

l a r a v e l new naziv_projekta

Uz pomoć Laravela instalirani su svi potrebni delovi i stvoren je novi, prazan, projekat.Ovaj projekat sadrži samo osnovne delove aplikacije, koje dalje možemo nadograđivati. Možemo

36

Page 38: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

otvoriti ovaj projekat u PhpStorm-u (ili nekom drugom razvojnom okruženju) i videti strukturufoldera kakvu smo dobili kreiranjem novog projekta (videti sliku 15).Za početag rada od suštinskog značaja su folderi:

• app - folder u kome su smešteni modeli i kontroleri

• public - folder u kome se nalazi sav "javni sadržaj". Ovde su smeštene slike, javascript,css i ostalijavni sadržaj.

• resources - folder u kome su smešteni pogledi (views)

• routes - folder u kome definišemo rute i upravljamo njima

• .env - fajl u kome se nalaze osnovni konfiguracijski parametri

Na predstojećoj slici je sa leve strane prikazano stablo foldera nakon kreiranja novog Laravelprojekta, a sa desne strane su prikazani podfolderi foldera navedenih u prethodnom nabrajanju.

Slika 15: Stablo foldera novokreiranog projekta

Sada je na redu da pokrenemo server na kome će se nalaziti naša aplikacija. Za njegovopokretanje u komandnu liniju unosimo naredbu:

php a r t i s a n s e rve

Nakon što se naredba izvršila, dobili smo poruku Laravel development server started: i adresuna kojoj je server startovan.

Slika 16: Kreiranje i pokretanje Laravel projekta u komandnoj liniji

37

Page 39: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Unošenjem navedene adrese u pretraživač, dolazimo do stranice na kojoj se nalazi naša novon-apravljena aplikacija. Njen izgled prikazan je na sledećoj slici.

Slika 17: Osnovni izgled Laravel aplikacije nakon pokretanja projekta

6.2 Namespace

Namespace ili kako se u literaturi prevodi, imenski prostor, predstavlja način grupisanja eleme-nata. Na primer to može biti grupisanje klasa, interfejsa i fukcija u okviru jednog projekta.Namespace se definiše na početku fajla u kome se nalazi klasa, interfejs ili funkcija.Grupisanje koje namespace podrazumeva možemo porediti sa time da u svakom operativnomsistemu možemo povezane fajlove grupisati u foldere. Ovakvim grupisanjem mi stvaramo "pros-tor" na računaru u okviru koga ćemo čuvati fajlove koji su povezani.Kao što već znamo, u okviru jednog foldera ne možemo imati dva ili više fajlova sa istim imenom,međutim to isto ime fajla možemo koristiti u nekom drugom folderu. Na primer, u folderu Pre-davaci ne možemo dva puta imati fajl sa imenom lista.txt, ali fajl sa ovim nazivom možemo imatiu okviru foldera Studenti. Postavlja se pitanje kako ćemo znati kom fajlu pristupamo? Kom fajlupristupamo određujemo na osnovu putanje (rute).Na primer ukoliko želimo da pristupimo fajlu lista.txt u folderu Predavaci onda će putanja biti:.../Predavaci/lista.txt.A ukoliko želimo da pristupimo fajlu lista.txt u folderu Studenti onda će putanja biti: .../Stu-denti/lista.txt.Uvođenjem namespace-a je rešeno nekoliko ključnih problema:

• Kolizija naziva ili preklapanje imena klasa i funkcija sa nazivima internih PHP klasai funkcija. Na primer da nema namespace-a ukoliko bismo želeli da damo funkciji nazivsplit() javila bi se greška, jer već postoji takva ugrađena funkcija.

• Dugački nazivi klasa su još jedan od problema i oni su najčešće posledica toga da susvi fajlovi u jednom folderu. Kako ne mogu postojati dva fajla sa istim imenom (u okviruistog foldera), postoji tendencija da se fajlovima daju izuzetno dugački nazivi.

• Alijas - mogu se definisati skraćeni nazivi klasa

38

Page 40: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Kao što je već rečeno, na početku ovog poglavlja, kreiranje namspace-a se u PHP-u definiše napočetku samog fajla. Isti namespace se može definisati u više različitih fajlova. Svi oni fajlovikoji imaju isti namespace pripadaju istoj grupi, a definicija namespace-a u PHP-u se vrši nasledeći način:

namespace nazivImenskogProstora ;

6.2.1 Subnamespace

Ukoliko imenski prostor (namespace) ima "dete (naslednika)", ono se naziva subnamespace idefiniše se:

namespace r o d i t e l j \ dete ;

Ovo se može uporediti sa domenima i poddomenima. Naziv svakog subnamespace-a počinje odvrha hijerarhije (root-a ili roditelja) i ide ka poddomenu.Na narednoj slici se nalazi primer kreiranja namespace-a:

Slika 18: Primer kreiranja namespace-a u PHP-u

Ukoliko bismo želeli da sada iz stranice index.php pozovemo klasu KlasaA iz foldera grupa1(videti prethodnu sliku 18) to ne bi bilo moguće uraditi na način kako smo to ranije činili:

<?phpinclude " k l a s e /grupa1/KlasaA . php" ;$klasaA = new KlasaA ( ) ;

?>

Ukoliko ovo otkucamo u fajlu index.php mi nećemo uspeti da pristupimo klasi KlasaA i doćicedo greške. Razlog tome je što fajl index.php i fajl KlasaA.php ne pripadaju istom namespace-u.U daljem tekstu će biti reči o tome kako se ovaj problem može rešiti i greška preduprediti.

39

Page 41: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.2.2 Globalni namespace

Kada za klasu ili funkciju nije eksplicitno definisano kom namsepace-u pripada (u kom namespace-u se nalazi), onda ona automatski pripada globalnom namespace-u.

Globalni namespace predstavlja root za sve imenske prostore i označava se sa \ ili senjegovo označavanje može izostaviti. U globalnom namespace-u se nalaze sve funkcije i metodekoje PHP jezik nudi i klasi koja se nalazi u globalnom namespace-u su dostupne samo one klasekoje se nalaze u njemu samom. Ovo je analogno logici da ukoliko klasa pripada određenomimenskom prostoru, ona je dostupna samo klasama koje su u tom imenskom prostoru i takođenjoj su dostupne samo one klase iz njenog namespace-a. Međutim ukoliko želimo da koristimoneku klasu iz nekog drugog imenskog prostora to se vrši pomoću ključne reči use:

use imenski_prostor_druge_klase ;

Nakon ovakovog povezivanja dve klase, u tekućoj klasi postaju dostupne sve klase iz uključenognamespace-a.Ukoliko se podsetimo primera sa slike 18 i sada u index.php stranici otkucamo sledeći kod:

<?phpuse k l a s e \grupa1 ;include ’ k l a s e /grupa1/KlasaA . php ’$klasaA = new grupa1\KlasaA ( ) ;

?>

Sada ćemo kao rezultat dobiti ispis teksta: Pozdrav iz grupe 1: Klase A!

Sada index.php ima pristup klasama iz globalnog i iz klase/grupa1 namespace-a. Iz ovog ra-zloga neophodno je definisati iz kog imenskog prostora želimo da uzmemo klasu, pa smo zbog togau include delu koristili putanju klase/grupa1/KlasaA.php. Kada navodimo klasu nije neophodnonavesti ekstenziju .php, jer koristimo programski jezik PHP i mogu se uključivati samo imenskiprostori tog jezika.

Ukoliko želimo da nekom namespace-u ne pristupamo po njegovom punom nazivu, moguće jeza neki imenski prostor kreirati alias. Alias nekog imenskog prostora se kreira pomoću ključnereči as i definiše se na sledeći način:

use imensk iProstor as z e l j e n i A l i a s ;

Nekada je neophodno definisati sopstveni alias za neki namespace. Ovo je naročito neophodno usituaciji kada se koriste dve klase istog imena iz različitih namespace-a. Naravno ovde je potrebnoda alias prve i druge uključene klase budu različiti, kako bi se izbegla kolizija.

40

Page 42: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Evo kako bi izgledala upotreba aliasa u index.php fajlu:

KlasaA . php<?php

namespace k l a s e \grupa1 ;c l a s s KlasaA{

func t i on _construct ( ) {echo "Pozdrav i z grupe1 : Klase A! "

}}

?>

KlasaA . php<?php

namespace k l a s e \grupa2 ;c l a s s KlasaA{

func t i on _construct ( ) {echo "Pozdrav i z grupe2 : Klase A! "

}}

?>

index . php<?php

use k l a s e \grupa1\KlasaA as A1 ;use k l a s e \grupa2\KlasaA as A2 ;

include ’ k l a s e /grupa1/KlasaA . php ’ ;include ’ k l a s e /grupa2/KlasaA . php ’ ;

$a1 = new A1 ( ) ;$a2 = new A2 ( ) ;

?>

Kao rezultat poziva ovih funkcija dobićemo ispis:Pozdrav iz grupe 1: Klasa A! Pozdrav iz grupe 2: Klasa A!Primetimo da aliasi imaju različita imena, jer da smo naveli da se oba aliasa zovu A1 onda bidošlo do kolizije imena.

41

Page 43: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.3 Klase u Laravelu

U poglavlju 2.5 opisan je pojam klase u programskom jeziku PHP, a sada će se na to nadovezatikreiranje klase u Laravelu.Klase u Laravelu se automatski učitavaju po definisanom Standardu za automatsko učitavanje.Trenutno je to PSR4 standard za učitavanje klasa. Da bi se klasa po navedenom standardu moglaautomatski učitati potreban je loader. Loader je obezbeđen Composer -om i svaka klasa koja seučitava na ovaj način mora imati definisan namespace (imenski prostor), o kome je bilo više rečiu prethodnom poglavlju. Namespace ima ulogu da govori funkciji za automatsko učitanje gde seklasa nalazi unutar hijerarhije foldera u projektu. Kao što već znamo, namespace se definiše uzaglavlju projekta i uvek se piše na početku klase, kao prva direktiva u klasi.Neka se neka naša klasa nalazi u namespace-u App\Klase. U definiciji imenskog prostora netreba navoditi ime klase, već samo folder u kome se klase nalaze. Mađutim, ukoliko želimo dakreiramo instancu ove klase, neophodno je navesti ceo imenski prostor zajedno sa imenom klase.Evo primera klase i kreiranja instance te klase u bilo kom delu projekta:

namespace App\Klase ;

c l a s s KlasaA{

pub l i c $a t r i bu t ;

pub l i c func t i on metod ( ){

re turn $th i s−>at r i bu t ;}

}

$instancaKlaseA = new App\Klase \KlasaA ( ) ;

U velikim projektima namespace klase može biti veoma dugažak i kompleksan za pamćenje.Iz ovog razloga uvedena je rezervisana reč use koja daje signal da će se u tekućem fajlu koristitiklase iz navedenog namespace-a. Use se definiše uvek ispod definisanja imenskih prostora, aiznad definisanja klase.

42

Page 44: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.4 Realizacija MVC arhitekture u Laravel projektu

Kao što je već bilo reči u ranijim odeljcima, MVC je softverski patern koji odvaja tri glavneceline - model, pogled i kontroler.U Laravel projektima u osnovnom (javnom) folderu tj. root-u sajta se nalazi .htaccess fajl kojisvaki dobijeni zahtev preusmerava na index.php stranicu. index.php stranica odatle prosleđujezahtev i poziva sistem za rutiranje koji interpretira URL adresu i na osnovu nje učitava određenikontroler i njegov metod. .htaccess predstavlja konfiguracioni fajl kojime se mogu promenitipodrazumevana podešavanja Apache servera. U ovom fajlu se može dozvoliti ili onemogućitipristup određenim fajlovima i folderima, može se izvršiti redirekcija jedne stranice na drugu itome slično. Ukoliko ne postoji tražena strana (strana na koju je korisnik redirektovan) onda sekorisnik preusmerava na stranu 404.Nakon pristizanje HTTP zahteva, on biva preusmeren na Laravel-ov sistem za rutiranje kojiinterpretira URL adresu i na osnovu nje poziva odgovarajući kontroler i njegov metod. Metodu kontroleru obavlja potrebnu logiku, a ako ima potrebe poziva model i na kraju učitava view.Ovime se zatvara krug u MVC principu komunikacije.

6.5 Rutiranje u Laravel projektu

Ruta predstavlja sve ono što se nalazi iza baznog dela URL adrese sajta. Fajl u kome se kreirajurute nalazi se na lokaciji routes/web.php.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 korišćene metode su get i post, dok se ostale u glavnomkoriste za realizaciju web servisa. Statičke metode nisu vezane za konkretnu instancu klase (zakonkretan objekat), već one važe na nivou cele klase. Statičke metode se mogu pozvati prekoimena klase ukoliko se vrši njihov poziv van klase:

ImeKlase : : imeMetoda ( )

ili se mogu pozvati pomoću rezervisane reči self, ukoliko se poziv vrši unutar definicije klase:

s e l f : : imeMetoda ( )

Svaki od nabrojanih metoda predstavlja HTTP zahtev koji se na toj ruti očekuje. Metodurute se prosleđuju sledeći parametri:

1. Prvi parametar je ruta u string formatu koja se očekuje iz URL adrese.

2. Drugi parametar ukazuje na konkretan kontroler i njegov metod. Karakter @ razdvajaime kontrolera i ime metoda tog kontrolera.

Konkretna ruta poziva kontroler i njegov metod koji učitava željeni view. Taj view se nakraju procesa prikazuje korisniku.

Route : : get ( "/ s t rana " , "Kontroler@metod" )

Ukoliko je kreirana prethodno navedena ruta, kada u URL-u nakon podrazumevane adreseotkucamo /strana, tada će se pozvati kontroler Kontroler i metod metod. Tok izvršavanja ćebiti: ruta → kontroler → metod u kontroleru → prikaz.

43

Page 45: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Veoma često postoji potreba da se putem rute pošalju određeni parametri metodu kontrolera.Laravel podržava takozvanu SEO frendly ili Semantic URL sintaksu. Ova sintaksa podrza-umeva navođenje kose crte iza imena rute koja razdvaja parametre koji se prosleđuju. Na primer,ukoliko želimo da prosledimo parametre JelenaMatejic i 35RN, to bi u URL-u imalo oblik:http://127.0.0.1:8000/home/korisnici/JelenaMatejic/35RN.Na ovaj način možemo proslediti neograničen broj parametara koje možemo uzeti (dohvatiti) ikoristiti u metodu.Parametri rute se definišu u njenoj postavci i okruženi su vitičastim zagradama { i }. Parametrikoje prosleđujemo mogu biti obavezni ili opcioni. Parametar postaje opcion tako što mu se nakonimena stavi upitnik ?. Promenljiva kojom se pristupa vrednosti parametra će imati isto ime kaoi parametar.Evo jednog opšteg primera u kome prosleđujemo obavezan parametar pod nazivom var :

Route : : get ( ’ / t e s t /{ var } ’ , ’ Kontroler@metod ’ )

Sada je parametar var obavezan pri definiciji metoda metod . Prosleđeni parametar se iz URLadrese prihvata kao argument metoda metod i dostupan je za korišćenje u telu metoda. Ar-gument mora imati isti naziv kao prosleđeni parametar. Klasa ovako definisanog kontrolera saodgovarajućim metodom će izgledati:

namespace App\Http\ Con t r o l l e r s ;

c l a s s Kontro ler{

pub l i c func t i on metod ( $var ){

echo $var ;}

}

Ukoliko rutu definišemo kao:

Route : : get ( "/ t e s t /{ var ?}" , "Kontro le r@kontro le r " )

tada je paramatar var opcioni. Kada se navodi u metodu mora mu se postaviti podrazumevana(default) vrednost koja će se koristiti ukoliko ne bude prosleđen parametar u URL adresi. Klasaovako definisanog kontrolera će izgledati:

use App\Http\ Con t r o l l e r s

c l a s s Kontro ler{

pub l i c func t i on metod ( $var = "Neka vrednost " ){

echo $var}

}

44

Page 46: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.5.1 Paterni u rutama

Kada smo kreirali rutu, mi smo je kreirali ne misleći o tome koji je tip parametra koji jojprosleđujemo jer je PHP slabo tipiziran programski jezik. Međutim, nekada nam je potrebnoda obezbedimo da se, na primer, ruti mogu prosleđivati samo brojevi. To možemo realizo-vati u okviru metoda where(), definisanjem paterna koji će proveravati vrednost prosleđenogparametra. Ukoliko vrednost prosleđenog parametra nije u skladu sa regularnim izrazom, rutaće odbaciti zahtev, u suprotnom zahtev će biti prihvaćen.Metoda where() kao argument očekuje heš mapu (asocijativni niz) čiji je ključ naziv parametraiz rute, a vrednost je regularni izraz. Na mestu regularnog izraza se može pisati bilo koji paternkoji je u skladu sa proverom parametara koji se prosleđuju.Evo primera kako izgleda ruta u kojoj proveravamo da li je prosleđeni id numerička vrednost:

Route : : get ( ’ / t e s t /{ id } ’ , ’ Kontroler@metod ’)−>where ( [ ’ id ’=>’ [0−9]+ ’ ] ) ;

Neka klasa kontrolera izgleda ovako:

<?phpnamespace App\Http\ Con t r o l l e r s ;

c l a s s Kontro ler {pub l i c func t i on metod ( $ id ) {

echo $id ;}

}?>

Ukoliko ruti prosleđujemo numeričku vrednost, ta vrednost će biti ispisana na ekranu, aukoliko joj budemo prosledili neki string (što ne odgovara uslovu iz where) onda ćemo na ekranudobiti poruku Sorry, the page you are looking for could not be found.Ukoliko na više mesta u kodu koristimo istu proveru parametara tj. koristimo isti patern, tajproblem možemo rešiti definisanjem globalnog paterna. Globalni patern optimizuje pisanje kodai definiše se na sledeći način:

Route : : pattern ( ’ id ’ , ’ [0−9]+ ’ )

Prvi parametar koji je prosleđen funkciji pattern je naziv parametra za koji se poziva provera, adrugi parametar koji se prosleđuje je regularni izraz.Poziv rute u kojoj proveravamo da li je prosleđeni id numerička vrednost, izgledaće veoma jed-nostavno:

Route : : get ( ’ / t e s t /{ id } ’ , ’ Kontroler@metod ’ )

45

Page 47: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.6 Kontroleri u Laravelu

Svi kontroleri u Laravelu se nalaze u folderu: app/Http/Controllers.

Slika 19: Organizacija kontrolera na primeru aplikacije za elektronsko učenje

U kontroleru se mogu grupisati srodni zahtevi i mogu se obrađivati na jednom mestu. Kon-troler je klasa, pa je stoga neophodno da ime fajla i ime klase počinju velikim početnim slovom.Kao i bilo koja druga klasa i kontroler ima svoje atribute i metode (funkcije), koje će se pozivatikada se unese odgovarajuća URL adresa.Kada su definisani kontroleri i metodi, potrebno je definisati i rutu preko koje će oni biti pozvani.Prilikom definisanje rute u routes/web.php navodi se ime kontrolera i ime metode koja se u tomkontroleru poziva (kao što je to bilo pokazano u prethodnom odeljku). Naravno, u zaglavljukontrolera je neophodno navesti namespace tj. da bi klasa imala funkcionalnost kontrolera, onamora naslediti bazni kontroler Controller, koji se nalazi u folderu app/Http/Controllers.Ukoliko želimo da napravimo kontroler koji sadrži metod koji prikazuje view home.blade.php izfoldera resources/views, to možemo uraditi na sledeći način:

namespace App\Http\ C i n t r o l l e r s ;

c l a s s Kontro ler{

pub l i c func t i on metod ( ){

re turn view ( ’home ’ ) ;}

}

Možemo zapaziti da prilikom učitavanja pogleda home nije bilo potrebe za navođenjem ekstenzije.blade.php.

Najčešće greške do kojih dolazi prilikom rada sa kontrolerima su:

• Nije definisan kontroler - dolazi do greške: Kontroler does not exist

• Nije definisan metod u kontroleru - dolazi do greške: Call to undefined method

• Nije dobro definisana ruta - dolazi do greške: Sorry, the page you are looking for could notbe found

.

46

Page 48: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.6.1 Organizacija kontrolera

Kontroleri se nalaze u folderu app/Http/Controllers i u tom folderu se mogu ređati u beskon-ačno dug niz. Međutim, kontroleri se mogu nalaziti i u okviru podfoldera u folderu app/Http/-Controllers/Kontroleri. Ovakve foldere je moguće beskonačno ugnježdavati, samo trebaobratiti pažnju na njihov poziv (videti sliku 19). Ukoliko se neki kontroler nalazi u folderuapp/Http/Controllers/Kontroleri, tada je potrebno navesti čitavu adresu u zaglavlju pro-grama, i to na sledeći način:

use App\Http\ Con t r o l l e r s \ Kont ro l e r i

c l a s s Kontro ler{

pub l i c func t i on metod ( $var = "Neka vrednost " ){

echo $var ;}

}

A ruta će izgledati:

Route : : get ( "/ t e s t /{ var ?}" , " Kont ro l e r i \Kontroler@metod" )

Na primeru aplikacije za elektronsko učenje, klasa UserController.php se nalazi u ap-p/Http/Controllers/User folderu (videti sliku 19). Kada želimo da otvorimo index.blade.phpstranicu za administratora, potrebno je da u ruti navedemo koju funkciju želimo da pozovemoi da potom u izvršenju te funkcije prikažemo (vratimo) pogled koji je definisan stranicom in-dex.blade.php. Rutiranje će u web.php fajlu, za ovaj kontroler, izgledati:

A metod index() koju pozivamo iz UserController.php fajla će izgledati:

47

Page 49: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.7 Rad sa zahtevima

Zahtevi (elgl. Request) su najčešća potreba u izradi web aplikacije. Klasa koja u Laravelu pružamogućnost za rad sa korisničkim zahtevima je Illuminate/Http/Request.Najčešće korišćeni zahtevi su:

• url() vraća trenutnu url adresu

• ip() vraća ip adresu klijenta

• getMethod() vraća tip metoda zahteva (post, get, patch i tome slično)

• all() dohvata sve podatke poslate zahtevom

• has($ imeAtributa) vraća true ili false u zavisnosti od toga da li postoji element sazadatim imenom atributa

• hasFile($ imeAtributa) vraća true ili false u zavisnosti od toga da li postoji fajl sazadatim imenom atributa

• file($ imeAtributa) vraća fajl sa zadatim imenom atributa

• get($ imeAtributa) vraća vrednost elementa sa zadatim imenom atributa

Svaki metod kontrolera treba da vrati odgovor (engl. response) pregledaču (engl. browser)korisnika. Najjednostavniji tip odgovora je string. Vraćajući string Laravel će takav odgovorautomatski konvertovati u kompletan HTTP odgovor. Potrebno je samo navesti ključnu rečreturn i iza nje string koji želimo vratiti, kao u sledećem primeru.

use App\Http\ Con t r o l l e r s ;use I l l um ina t e \Http\Request ;

c l a s s Kontro ler{

pub l i c func t i on metod ( ){

re turn "Zdravo ! <br> Ovo j e moj prv i p ro j eka t u Laravelu ! " ;}

}

Možemo primetiti da je gore bilo potrebno koristiti i priključiti klasu:Illuminate\Http \Request.Ova klasa pruža metode koje omogućuju rad sa korisničkim zahtevom. Ukoliko u odgovoru (engl.response) vraćamo niz, Laravel će ga automatski konvertovati u JSON response.

Pored sadržaja odgovora, moguće je menjati i njegov status i header-e. Podrazumevano je daserver sam odredi HTTP status odgovora, ukoliko programer ne navede drugačije. Čest slučajje da je potrebno napraviti izvesne izmene, tako da je ostavljena mogućnost programeru da ihsam napravi. Za takave izmene koristi se response funkcija. Ova funkcija kao prvi i obavezanparametar sadrži podatke koje treba vratiti, zatim status koji je opcioni i na kraju se opcionododaju header-i.

48

Page 50: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.8 Kreiranje View-a u Laravelu

Kao što je već do sada objašnjeno, pogled (enlgl. View) predstavlja jedan od tri elementa MVCarhitekture i namenjen je prikazu podataka. View predstavlja skup front-end tehnologija koje suproširene sintaksom Laravel razvojnog okruženja, što obezbeđuje dinamički prikaz web stranice.

Za poglede, Laravel koristi ekstenziju .php. Međutim pored navedene ekstenzije Laravel imepogleda završava sa .blade. Blade je engine koji Laravel podrazumevano koristi u radu sa pogled-ima. On je veoma jednostavan i moćan Laravel alat koji je namenjen za kreiranje, korišćenjei upravljanje sadržajem kroz upotrebu nekog template-a. Opširnije o Blade-u je bilo reči upoglavlju 5.4.

Svi pogledi koje napravimo i sačuvamo nalaze se u folderu resources/ views. Na slici saleve strane prikazan je deo stabla pogleda koji se nalaze u aplikaciji za elektronsko učenje. Radibolje preglednosti, pogledi su okvireni, a može se zapaziti da se oni nalaze u okviru podfoldera,što je učinjeno radi bolje organizacije.

Kreiranje novog pogleda svodi se na kreiranje novog .php fajla u folderu views. Podrazumevano,sadržaje pogleda možemo menjati po želji i potrebama (stvaramo i vršimo izmene uobičajenog.html koda). Ukoliko je naziv nekog pogleda pocetna, u Laravelu će ovaj view biti nazvanpocetna.blade.php.

Koji pogled će inicijalno biti prikazan definiše seu fajlu routes/web.php.Definisanje rute vršimo na sledeći način:

Route : : get ( ’ / ’ , f unc t i on ( ) {re turn view ( ’ pocetna ’ ) ;

} ) ;

Ovime smo definisali da kada je pregledač uroot-u sajta (’/’), tada aplikacija treba davrati view(’pocetna’). Prilikom poziva pogledapočetne strane, naziv navodimo pod apostrofimai bez ekstenzije .blade.phpUkoliko sada želimo da učitamo pogled kursevi,potrebno je definisati šta treba da se nađe u URLadresi da bi se view kursevi prikazao. Definisanjeove rute bi izgledalo:

Route : : get ( ’ / kur s ev i ’ , f unc t i on ( ) {re turn view ( ’ ku r s ev i ’ ) ;

} ) ;

Program koji je napisan u Laravelu ne zahteva prevođenje (kompajliranje), već se interpretirapri svakom izvršavanju. Interpretiranje se vrši od prvog do poslednjeg navedenog fajla.

49

Page 51: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.9 Modeli u Laravelu

Modeli u Laravelu su zaduženi za obradu i uzimanje (dohvatanje) podataka. Najčešće su re-alizovani kroz rad baze podataka. Obradu i uzimanje podataka diktira kontroler koji podatkedobijene od modela dalje prosleđuje pogledu (view-u) kako bi oni bili prikazani.Kada govorimo o modelima, neophodno je napomenuti i kako u projektu ostvarujemo vezu sabazom podataka. Da bismo ostvarili vezu sa bazom, neophodno je podesiti pristupne parametrekoji se nalaze u .env konfiguracionom fajlu.Na primer, ja sam podesila sledeće parametre u svom projektu:

DB_CONNECTION=mysqlDB_HOST=127 .0 .0 .1 // s e r v e r baze podatakaDB_PORT=3306DB_DATABASE=master // naz i v ( ime ) baze podatakaDB_USERNAME=root // ko r i s n i c k o ime za p r i s t u p ba z i podatakaDB_PASSWORD=123 // l o z i n k a za p r i s t u p ba z i podataka

6.10 Migracije u Laravelu

Migracije su kontrolne strukture baze podataka u Laravelu. One nam omogućuju lako i jed-nostavno kontrolisanje baze podataka naše aplikacije tj. jednostavno definisanje i modifikovanjebaze korišćenjem PHP koda. Migracije su nešto slično Version Control -u, samo što se primenjujunad bazama podataka.Pri kreiranju migracija biće korišćen Artisan i sve komande će se odnositi na ovu komandnuliniju.Na primer, ukoliko na početku rada želimo da najpre napravimo tabelu u bazi u kojoj će senalaziti sve migracije koje su izvršene, u redosledu u kome su izvršavane, to možemo uraditikomandom:php artisan migrate:installOvom komandom smo dobili tabelu migracija i u njoj će biti zabeležene sve migracije kojebudemo pravili.Da bismo kreirali tabelu u bazi podataka, koristićemo sledeću komandu:php artisan make:migration create_ime_tabele_table – create=ime_tabelephp artisan migrate

Migracija koju smo upravo kreirali će se nalaziti u folderu laravel/database/migrationpod nazivom:datum_vreme create_ime_tabele_table.Migracije automatski dodeljuju svakoj svojoj komandi datum i vreme, kako bi Laravel mogao daodredi redosled migracija.

Na predstojećoj slici, možemo videti jedan deo migracija koje su kreirane u aplikaciji namen-jenoj za elektronsko učenje. Još jednom napominjem da Laravel sam dodeljejuje datume koji sunavedeni ispred naziva tabela. Takođe, primetimo da svi ovi fajlovi migracija imaju ekstenziju.php, koja je takođe automatski pridodata prilikom kreiranja migracije, jer se pri izvršavanjumigracija koristi PHP za kompajliranje.

50

Page 52: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Slika 20: Stablo migracija

Kada otvorimo kreirani fajl (migraciju) možemo uočiti da je Laravel sam predefinisao nekapolja (kolone u tabeli) i neke metode. Klasa migracije sadrži dve metode up() koja se koristiza dodavanje nove tabele, kolona ili indeksa i down() metod koji, na primer, treba da pokreneoperaciju brisanja tabele ukoliko ona već postoji u bazi.Za kreiranje tabele unutar Migracije, koristimo Schema::create() statički metod, i kreiranjevršimo unutar up() metoda migracije. create() metod prihvata dva argumenta: prvi argument jeime tabele, a drugi argument je funkcija koja prihvata jedan argument (objekat) tipa Blueprintkoji se koristi za definisanje nove tabele u bazi.

Slika 21: Sadržaj fajla koji nastaje kreiranjem migracije

Da bismo pokrenuli sve "zastarele" migracije tj. da bismo izvršili ažuriranje, potrebno je dau Artisan komandnoj liniji izvršimo komandu:php artisan migrateNekada je moguće da se ova komanda neće izvršiti jer se Artisan "boji" da će potencijalno izgu-biti neke podatke. Ukoliko uz rizike ipak želimo da izvršimo migraciju, onda to možemo uraditipomoću komande:php artisan migrate –force

51

Page 53: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Ukoliko smo se uverili da neka migracija nije bila dobar korak možemo se vratiti korak unazad komandom:php artisan migrate:rollback

Ili se možemo vratiti više koraka (broj_koraka) u nazad komandom:php artisan migrate:rollback –step=broj_koraka

A ukoliko želimo da sve do sada izvršene migracije poništimo i vratimo se na početak, tomožemo obaviti komandom:php artisan migrate:reset

Pored podrazumevanih atrubuta (polja) koja se u tabeli nalaze prilikom kreiranja migracije,moguće je dodavati i druga polja. Sva polja se dodaju na isti način naredbom:$table -> tip(’naziv_kolone’).Najkarakterističniji tipovi podataka su (umesto -> koristiću znak →):

• $table → bigInteger(’naziv_kolone’) prihvata celobrojne vrednosti do dvadeset cifaradužine

• $table → boolean(’naziv_kolone’) prihvata true(1) /false(0) vrednosti

• $table → date(’naziv_kolone’) prihvata datume u formi gggg-mm-dd

• $table → dateTime(’naziv_kolone’) prihvata datum i vreme u formi gggg-mm-ddhh:mm:ss

• $table → string(’naziv_kolone’, broj_karaktera) podrazumevano prihvata tekst doveličini 1MB ukoliko se ne doda drugi (opcioni) parametar koji određuje broj karakterakoje polje može sadržati

• $table → text(’naziv_kolone’) prihvata tekstualni sadržaj

• $table → decimal(’naziv_kolone’) prihvata decimalne vrednosti

• $table → binary(’naziv_kolone’) prihvata binarni sadržaj

• $table → timestamps() dodaje created_at i updated_at kolone i u njima belezi vrednostikada je polje dodato, a kada je vršena njegova poslednja izmena

• $table → unique(’naziv_kolone’)

Pored tipa podatka, koloni koja se dodaje je moguće dati i još neki atribut poput po-drazumevane vrednosti, eksplicitno joj dati koja će po redosledu biti i tome slično. Dodavanjese vrši tako što se iza atributa koji određuje tip na isti način doda novi atribut.Neki od najkarektirističnijih ovakvih atributa su:

• → autoIncrement() koloni daje vrednst primarnog ključa i dodavanjem svakog novogreda njena vrednst se automatski inkrementira

• → default(’podrazumevana_vrednost’) specificira podrazumevanu (default) vrednstkolone

• → first() postavlja kolonu da bude prva u tabeli

52

Page 54: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Nad kolonama se mogu vršiti i izmene. Da bi izmene bile omogućene najpre se mora izvršitikomanda koja će instalirati dbal biblioteku. U komandnoj liniji treba izvršiti:composer require doctrine/dbalSada kada je moguće vršiti izmene, to činimo preko metode →change().Ukoliko na primer želimo da ograničimo broj karaktera u imenu mi to možemo izvršiti na sledećinačin:

Schema : : t ab l e ( ’ k o r i s n i c i ’ , f unc t i on ( Bluepr int $ tab l e ) {$table−>s t r i n g ( ’ ime ’ , 50)−>change ( ) ;

} ) ;

Ukoliko želimo da promenimo ime kolone, to je moguće realizovati komandom:→renameColumn(’staro_ime_kolone’,’novo_ime_kolone’).Takođe kao i u klasičnom SQL-u i ovde je moguće izbrisati neku kolonu. I za realizaciju ovekomande je potrebno instalirati ranije pomenuti paket doctrine/dbal.Za brisanje kolone nam služi komanda →dropColumn(’naziv_kolone’). Ukoliko želimo daisbrišemo više kolona potrebno ih je navoditi pod apostrofima i odvajati zarezima. Evo primerakako možemo obrisati više kolona:

Schema : : t ab l e ( ’ k o r i s n i c i ’ , f unc t i on ( Bluepr int $ tab l e ) {$table−>dropColumn ( [ ’ ime ’ , ’ prezime ’ , ’ adresa ’ ] ) ;

} ) ;

Iako je moguće ovakav način izmene kolona, njihove izmene i brisanje, po mom mišljenju,je mnogo lakše izvršiti direktnu izmenu u fajlu željene migracije. Nakon izvršenih izmena trebaizvršiti resetovanje baze podataka, čime će se sve migracije ponovo izvršiti, a tabele će izgladitionako kako je izmenama naloženo. Mana ovog postupka je u tome što ovom prilikom gubimosve podatke koje smo do sada imali u bazi podatka - baza podataka postaje prazna. Resetovanjebaze podataka možemo izvršiti komandom:php artisan migrate:refresh

Migracije u Laravelu takođe podržavaju i kreiranje stranih ključeva, koji se i ovde koriste zapovezivanje tabela. Povezivanje tabela vršimo na nešto kompleksniji način nego sto je to slučajkod klasičnog povezivanja tebela u SQL bazama podataka.Laravel podržava sledeće vrste povezivanja tabela u bazi podataka:

• Jedan prema jedan (engl. one to one) ili poznata kao 1:1

• Jedan prema više (engl. one to many) ili poznata kao 1:n

• Više prema više (engl. many to many) ili poznata kao n:m

• Polimorfna relacija

• Više prema više polimorfna relacija

U naredna tri odeljka biće detaljnije razrađene prve tri od navedenih relacija. Ove relaciju supoznate iz SQL-a i korišćene su u izradi projekta za elektronsko učenje.

53

Page 55: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.11 Relacija jedan prema jedan (1:1)

Kao prvu relaciju navešću jedan prema jedan relaciju (engl. one to one), koja je još poz-nata kao 1:1 relacija. Ova, vrlo bazična relacija, se koristi na primer kada želimo da naglasimoda jedan korisnik (engl. user) može imati samo jedan email, što vizuelno možemo predstaviti:

Slika 22: Dijagram relacije jedan prema jedan

Kod ove relacije ne treba dodavati dodatna polja migracijama koje posedujemo, niti jepotrebno kreirati novu migraciju. Jedino šta je potrebno je povezati primarne ključeve u tabelamaemail i user, i na taj način će biti izvršeno povezivanje tabela relacijom jedan prema jedan.Za definisanje ove relacije potrebno nam je da u User klasi navedemo email() metod, koji će"reći" da korisnik može imati samo jedan email, i to na sledeći način:

c l a s s User extends Model{

pub l i c func t i on emai l ( ){

re turn $th i s−>hasOne ( ’App\ t ex tback s l a sh Models\ t ex tback s l a sh Email ’ ) ;

}}

Dakle, ovu funkciju možemo da tumačimo kao da korisnik ($this), može imati jedan email(hasOne(”App\Models\Email”)).Pored ove metode, potrebno napraviti i metodu user() u klasi Email koja će kazivati da jedanemail ($this), može imati samo jednog korisnika (belongsTo(’App\Models\User).

c l a s s Email extends Model{

pub l i c func t i on user ( ){

re turn $th i s−>belongsTo ( ’App\ t ex tback s l a sh Models\ t ex tback s l a sh User ’ ) ;

}}

54

Page 56: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.11.1 Relacija jedan prema više (1:n)

Još jedna poznata i često korišćena relacija je jedan prema više (engl. one to many) , kojaje još poznata i kao 1:n relacija. Slično kao i ranije, moramo dodati strani ključ u tabeli kakojoj imamo smernicu više. Na primeru aplikacije za elektronsko učenje, ova veza je korišćenapri povezivanju tabela korisnik (engl. user) i kurs (engl. course). Jedan korisnik (u ovom slučajupredavač) može predavati više kurseva, međutim jedan kurs može biti kreiran isključivo od stranejednog predavača. Vizuelno bi to izgledalo:

Slika 23: Dijagram relacije jedan prema više

Dakle, potrebno nam je da najpre dodamo strani ključ u tabeli kursevi (engl. courses).Strani ključ dodajemo nakon osnovnih kolona koje tabela sadrži i dajemo mu naziv koji sadržinaziv tabele sa kojom povezujemo, donja crta, id. U mom slučaju ja povezujem tabelu kurs(engl. course) sa tabelom korisnik(engl. user), pa će strani ključ imati ime user_id. Straniključ mora biti istog tipa kao šo je to primarni ključ (id) u tabeli korisnici. U našem slučaju tipje celobrojna numerička vrednost integer, a koloni dodajemo i atribut nullable što znači da poljeu tabeli može imati i null vrednost. Praktično primenjeno, funkcija u migraciji će izgledati:

c l a s s CreateCoursesTable extends Migrat ion{

pub l i c func t i on up ( ){

Schema : : c r e a t e ( ’ c ou r s e s ’ , f unc t i on ( Bluepr int $ tab l e ) {$table−>increments ( ’ id ’ ) ;$table−>s t r i n g ( ’name ’ ) ;$table−>text ( ’ d e s c r i p t i o n ’ ) ;$table−>in t e g e r ( ’ p r i c e ’ ) ;$table−>in t e g e r ( ’ user_id ’)−>nu l l a b l e ;$table−>timestamps ( ) ;

} ) ;}pub l i c func t i on down ( ){

Schema : : d r op I fEx i s t s ( ’ c ou r s e s ’ ) ;}

}

55

Page 57: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Sada je potrebno izvršiti povezivanje ove dve tabele. Povezivanje vršimo u klasi od kojepočinje jedan relacija u vezi. U našem slučaju to je klasa User, koja se nalazi u ranije pominjanomfolderu Model, koji smo sami kreirali. U ovoj klasi pravimo funkciju koju nazivamo asocijativnopredaje (engl. teaches()). Dakle, naš cilj je da jedan predavač ($this tj. User), može predavativiše (hasMany()) kurseva (’App\Models\Course’ ).

pub l i c func t i on teaches ( ){

re turn $th i s−>hasMany( ’App\Models\Course ’ ) ;}

Ovime smo završili kreiranje jedan prema više (1:n) veze. Kada unosimo podatke, mogućeje da polju user_id nesmetano pristupamo klasom Course i osigurani smo da jedan kurs nećeimati više predavača.

6.11.2 Relacija više prema više (n:m)

Sledeća popularna relacija je relacija više prema više (engl. many to many), poznata još kaorelacija n:m. Ova relacija se nešto komplikovanije realizuje od prethodne, ali i dalje logikomliči na klasičnu više prema više relaciju, kakvu poznajemo. Kao što znamo, u ovoj relaciji nam jepotrebna međutabela koja će sadržati strane ključeve. Ova tabela se kod migracija naziva pivottabela i treba je nazvati tako da navedemo koje dve tabele povezujemo.Pivot tabelu kreiramokomandom:php artisan make:migration create_tabela1_tabela2_table –create=tabela1_tabela2Na primeru aplikacije za elektronsko učenje, potrebno je povezati tabelu kurs (engl. course) itabelu korisnik (engl. user). Tabele povezujemo relacijom više prema više jer jedan korisnik(učenik) može slušati više različitih kurseva, a i takođe jedan kurs može imati više učenika kojiga slušaju. Relacioni model za ovaj primer bi izgledao:

Slika 24: Dijagram relacije više prema više

Bitno je reći da pri kreiranju pivot tabele moramo voditi računa da tabele navodimo poabecednom redu. Pošto je course (kurs) tabela abecedno ispred user (korisnik) tabele, prvonavodimo tabelu course. Ovo je pravilo koje ne treba olako prevazići, jer u suprotnom dolazi dogrešaka prilikom rada sa migracijom, jer migracija onda često ne može biti pronadjena. Dakle,kreiranje migracije na ovom primeru će izgledati:php artisan make:migration create_course_user_table –create=course_user

56

Page 58: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Kada smo izvršili ovu komandu, pivot tabela je kreirana u folderu a[[/database/migrations, za-jedno sa ostalim migracijama. U fajlu su kreirane dve funkcije up() i down(), o kojima je i ranijebilo reči, i podrazumevano je dodat primarni kluč id koji svaka tabela ima i generiše se au-tomatski. Pošto u ovom fajlu nisu navedeni strani ključevi, to je potrebno da uradimo "ručno".Dodajemo ih u funkciji up() iza generisanog id polja. Strane ključeve imenujemo tako što nanaziv tabele, čiji je to strani ključ, dodamo sufiks u vidu donje crte i id. Nakon izmena koje smoobavili, fajl ..._create_course_user_table.php treba da izgleda ovako:

c l a s s CreateCourseUserTable extends Migrat ion{

pub l i c func t i on up ( ){

Schema : : c r e a t e ( ’ course_user ’ , f unc t i on ( Bluepr int $ tab l e ) {$table−>increments ( ’ id ’ ) ;$table−>in t e g e r ( ’ course_id ’)−>unsigned ( ) ;$table−>in t e g e r ( ’ user_id ’)−>unsigned ( ) ;$table−>timestamps ( ) ;

} ) ;}

func t i on down ( ){

Schema : : d r op I fEx i s t s ( ’ course_user ’ ) ;}

}

Pošto smo kreirali strane ključeve, potrebno je da kreiramo veze sa pivot tabelom. Vezekreiramo u klasama Course i User, jer mi zapravo tabele course i user povezujemo sa pivottabelom. U klasi User kreiraćemo funkciju studies() (pohađa) i ona će izgledati:

pub l i c func t i on s t ud i e s ( ){

re turn $th i s−>belongsToMany ( Course : : c l a s s ) ;}

Dakle, funkcija kazuje da jedan korisnik ($this), može imati više kurseva (belongsToM-any(Course::class)).Sada u klasi Course treba kreirati funkciju koja će kazivati da jedan kurs ($this), može imativiše korisnika (belongsToMany(User::class)). Funkciju u klasi Course ćemo nazvati studies() iizgledaće:

pub l i c func t i on us e r s ( ){

re turn $th i s−>belongsToMany ( User : : c l a s s ) ;}

Ovime smo završili kreiranje više prema više veze.

57

Page 59: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.12 Relacioni model baze podatka

Osnovna ideja relacione baze podataka je razdvajanje logičkog i fizičkog aspekta prikazivanjapodataka. Relacioni model predstavlja bazu podataka kao skup tabela, ne govoreći pri tomeništa o tome kako će informacije biti uskladištene u računaru. Prema tome, tabele predstavljajulogičku strukturu relacionog modela.U ovom odeljku neću se bazirati na osnovnim aspektima relacionog modela podataka, većisključivo na tome kako su tabele povezane i iz kojih razloga je korišćena određena relacijameđu njima. Šema koja se nalazi na predstojećem dijagramu u potpunosti odgovara logičkommodelu koji je korišćen u Pripremi Se projektu.

Slika 25: Dijagram relacionog modela baze podataka, na primeru Pripremi Se aplikacije

Na prethodnom dijagramu možemo uočiti da postoji osam tabela. Svaka od tabela ima id(jedinstven identifikacioni broj) koji predstavlja njen primarni ključ. Ovaj broj je celobrojnavrednost (INT) koja se automatski dodaje (AUTO INCREMENT) nakon kreiranja svakog redau tabeli. Iako u tabelama nije navedeno, svaka od tabela, prilikom kreiranja migracije, dobijai dva dodatna polja created_at i updated_at. Prvi od navedenih atributa govori o tome kadaje poslednji put odgovarajući red u tabeli kreiran, a drugi atribut govori o tome kada je odgo-varajući red poslednji put izmenjen. Ove atribute ne kreiramo mi, zbog toga nisu navedeni utabelama, već se kreiraju automatski prilikom kreiranja migracije.

58

Page 60: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Bitno je napomenuti da iako imamo osam tabela, neke od njih su osnovne, a neke od njihsu međutabele koje su nastale usled povezivanja tabela relacijom više prema više (n:m). Ovemeđutabele se kod migracija nazivaju pivot tabele.Osnovne tabele su:

• tabela korisnici skladišti osnovne informacije o svakom korisniku. Tipovi podataka ovetabele su dati proizvoljno, ali ukoliko je potrebno dodatno ograničiti neki atribut to jemoguće uraditi u samoj aplikaciji ili izvršiti promenu direktno u tabeli baze podataka.Atribute datum_rodjenja i telefon nije obavezno uneti, dok su ostala polja u tabeli po-drazumevana i dolazi do greške ukoliko ih izostavimo pri unosu.

• tabela role sadrži podatke o rolama koje postaoje u aplikaciji. Svaka rola sadrži svoj nazivi opis, i predstavlja privilegije koje korisnik sa tom rolom ima. U Pripremi Se aplikacijipostoje tri role: administratorska, predavačka i rola namenjena studentima.

• tabela kursevi čuva podatke o svakom od kreiranih kurseva. Možemo primetiti da su svapolja ove tabele obavezna i da je tabela kursevi povezana relacijom jedan prema više (1:n) satabelom korisnici. Kada relaciju prevedemo, dobijamo da jedan korisnik može kreirati višekurseva, međutim jedan kurs može biti kreiran samo od strane jednog korisnika. Korisnicisa rolom predavač imaju privilegiju da kreiraju kurseve, a id predavača koji je kreirao kursnalazi se u polju korisnik_id tabele kursevi.

• tabela kategorije je najjednostavnija tabela i ima samo jedan dodatni atribut a to jenaziv kategorije. U njoj se nalaze sve kategorije koje administrator doda, a dupliranjenaziva kategorija je onemogućeno (atribut je UNIQUE).

• tabela lekcije skladišti sve lekcije koje kreiraju predavači na nekom od svojih kurseva. Ovatabela je relacijom jedan prema više (1:n) povezana sa tabelom kursevi. U polju kurs_idtabele lekcija, nalazi se id kursa na koji se određena lekcija odnosi.

Međutabele (pivot tabele) su:

• role_korisnika je međutabela u kojoj se beleži koju privilagiju (rolu) neki korisnik ima.Pošto je nastala kao produkt više prema više (n:m) relacije između tabela korisnici i role,možemo reći da jedan korisnik može imati više rola (na primer može istovremeno bitipredavač i učenik), a sa druge strane i jedna rola može imati više korisnika (na primer, roluučenika mogu imati svi korisnici koji žele da slušaju neki kurs).

• kursevi_korisnika je pivot tabela koja je definisana relacijom više prema više (n:m)između tabela kursevi i korisnici. Možemo je tumačiti tako da jedan kurs može imati višekorisnika, a sa druge strane da jedan korisnik može slušati više kurseva.

• kategorije_kurseva je međutabela koja je nastala povezivanjem tabele kategorije i tabelekursevi relacijom više prema više (n:m). Jedna kategodija može imati više krseva (naprimer kategorija matematika može imati kurs iz matematike na PMF u Nišu i potpunodrugi kurs iz matematike na PMF u Kragujevcu). Sa druge strane, jedan kurs može imativiše kategorija (na primer kurs PMF u Nišu za biologiju i ekologiju se može klasifikovati iukategoriju bilologija, i u kategoriju ekologija).

59

Page 61: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

6.13 Rad sa bazom podataka u Laravelu

Kao što je već rečeno, model obezbeđuje podatke i biznis logiku aplikacije - komunikaciju sabazom ili nekim drugim izvorom podataka. Model jedino zna da upravlja podacima tj. vršibrisanje, izmenu ili dohvatanje podataka. Sve modele treba smeštati u okviru foldera app/Mod-els koji nije inicijalno napravljen po stvaranju projekta, već ga je potrebno naknadno (ručno)napraviti.Da rezimiramo još jednom, kao i kontroleri i modeli su klase i definišu se na isti način kao i ostaleklase u projektu, uključujući njihove atribute i metode. Bitno je napomenuti da je i u svakommodelu neophodno na početku klase uključiti folder u kome se nalazi model: App/Models iuključiti klasu DB iz foldera Illuminate/Support/Facades/DB.Evo primera kako treba da izgleda klasa jednog modela:

<?phpnamespace App\Models ;

c l a s s Model1 {pub l i c func t i on dohvatiPodatke ( ) {

// Upit ka ba z i podataka}

}?>

Iz prethodnog primera možemo videti da je u telu funkcije možemo pisati upit. Za pisanjeupita u Laravel-u, definisana je klasa DB koja se nalazi u namespace-u:Illuminate\Support\Facades.Ova klasa u sebi sadrži logiku za konekciju sa bazom, a zadate parametre koji se tiču baze čita iz.env fajla. Pored navedenih performansi, DB klasa sadrži skup statičkih metoda za pisanje upita.

SELECT je upit za dohvatanje podataka iz baze podataka. Ukoliko želimo da dohvatimo(selektujemo) sve podatke iz neke tabele tabela, to možemo realizovati na način:

DB: : s e l e c t ( "SELECT ∗ FROM tabe la " ) ;

Ukoliko želimo da upitu dodamo još neku naredbu, kao na primer da selektovani podaci buduraspoređeni u rastućem poretku prema koloni kolona, tada će upit biti:

DB: : s e l e c t ( "SELECT ∗ FROM tabe la1 t1ORDER BY kolona " ) ;

Prosleđivanje parametra SELECT upitu se može izvršiti na više načina. Jedan od njih jeprosleđivanje parametra SELECT upitu konkatenacijom. Kada želimo da prosledimovrednost na ovaj način, potrebno je da zatvorimo navodnike i nakon njih navedemo tačku (kao iinače kada vršimo konkatenaciju) i promenljivu koju želimo da prosledimo na tom mestu.

DB: : s e l e c t ( "SELECT ∗ FROM tabe laWHERE kolona = " . $vrednost ) ;

60

Page 62: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Sledeći način je prosleđivanje parametara SELECT upitu kroz funkciju. Ovaj načinrada se preporučuje jer je pregledniji kada je potrebnu upitu proslediti veći broj parametara. Kodove vrste prosleđivanja parametrara, na mestu gde želimo da prosledimo parametar navodimo:naziv_parametra . Nakon prosleđivanja ovaj deo će biti zamenjen vrednošću koja se proslediza taj parametar. Nakon završenog (zatvorenog) upita navodimo niz u kome svakom navedenomparametru dodeljujemo odgovarajuću vrednost. Parametre navodimo u formi niza jer ih možebiti više. Za svaki od parametara u nizu dodeljujemo vrednost promenljive kao u asocijativnomnizu (heš mapi), i to na sledeći način: array(’naziv_ parametra’ => vrednost).

DB: : s e l e c t ( "SELECT ∗ FROM tabe laWHERE kolona = : kolona " ,array ( ’ kolona ’ => $vrednost ) ) ;

Ukoliko želimo da prosledimo više parametara, u listi ćemo ih odvajati zarezom:

DB: : s e l e c t ( "SELECT ∗ FROM tabe laWHERE kolona1 = : kolona1 AND kolona2 = : kolona2 " ,array ( ’ kolona1 ’ = $vrednost1 , ’ kolona2 ’ = $vrednost2 ) ) ;

INSERT je upit koji služi za dodavanje podataka u bazu. Za razliku od SQL-a u komese ukoliko je kolona AutoIncrement tipa ne prosleđuje nikakakva vrednost (tj. vrednost togparametra se preskače, a sistem sam dodeljuje i inkrementira tu vrednost u pozadini), ovde sekao vrednost parametra prosleđuje null. INSERT upit se implementira na sledeći način:

DB: : i n s e r t ( "INSERT INTO tabe l aVALUES ( nul l , ’ vrednost ’ ) " ) ;

Prosleđivanje vrednosti INSERT upitu se vrši na isti način kao i kod SELECT upita:

DB: : i n s e r t ( "INSERT INTO tabe l a ( id , kolona1 , kolona2 )VALUES ( nul l , : kolona1 , : kolona2 ) " ,array ( ’ kolona1 ’=>$vrednost1 , ’ kolona2 ’=>$vrednost2 ) ) ;

UPDATE je upit koji se koristi za ažuriranje podataka u bazi podataka:

DB: : update ( "UPDATE tabe l aSET kolona = : kolonaWHERE id = : id " ,array ( ’ id ’=>$id , ’ kolona ’=>$vrednost ) ) ;

DELETE je upit koji je namenjen za brisanje podataka iz baze i implementira se:

DB: : delete ( "DELETE FROM tabe laWHERE id = : id " ,array ( ’ id ’=>$id ) )

61

Page 63: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Ne treba zaboraviti činjenicu da UPDATE i DELETE upiti ne vraćaju nikakvu vrednost, većse samo u pozadini izvršavaju i vrše izmene nad bazom podataka.

Pored navedenih naredbi moguće je koristiti i uopštenu naredbu statement koju možemo,na primer, koristiti ukoliko želimo da izbrišemo tabelu iz baze podataka:

DB: : statement ( ’ drop tab l e u s e r s ’ ) ;

6.14 Query builder u Laravelu

Query builder je sastavni deo Laravel framework-a koji omogućava obavljanje velikog broja op-eracija nad bazom podataka. Query builder pruža pouzdan interfejs za rad sa bazom podataka,kreiranje i pokretanje upita. Ovaj alat nije vezan za konkretan tip baze i njegove metode semogu primeniti na svim podržanim bazama podataka (MySql, Postgres, SQLite i SQL Serve).Prednosti korišćenja Query builder-a u poređenju sa pisanjem klasičnih upita su brojne, pa jepreporuka da se koristi ovaj način pisanja upita. Najveća prednost leži u tome da je na ovaj načinalikacija zaštićena od SQL injection napada. To se postiže time što se parametri ne prosleđujudirektno upitu konkatanacijom, ve će koristi način prosleđivanja parametara putem odgovarajućemetode.

U prethodnom poglavlju je već bilo reči o tome da se u Laravel-u za rad sa bazom podatakakoristi Laravelova ugrađena klasa DB. Ova klasa sadrži spisak metoda za kreiranje i pokretanjeupita, pa tako sadrži i upit za izbor tabele. To je statički metod koji je definisan ključnomreči table() i možemo reći da je to zamena za ključu reč FROM u upitima. Na primer, ukolikoželimo da selektujemo celu tabelu tabela iz baze podataka, to možemo implementirati:

DB: : t ab l e ( ’ t abe l a ’ ) ;

Metod get() je definisan za izvršavanje upita i dohvatanje svih redova iz tabele. Tip podatakakoji vraća get() metoda je kolekcija iz klase Illuminate/Support/Collection. Svaki elementove kolekcije je objekat tipa StdClass.SQL upit koji glasi: SELECT * FROM tabela u Query Builder-u će biti zamenjen sa:

DB: : t ab l e ( ’ t abe l a ’ )−>get ( ) ;

Iako metod get() zamenjuje SELECT * klauzulu, ipak se i dalje može koristiti select() metoda.Za dohvatanje svih kolona, kao u prethodnom primeru, možemo koristiti:

DB: : t ab l e ( ’ t abe l a ’ )−>s e l e c t ( ’ ∗ ’ )−>get ( ) ;

U select() metodu se mogu navesti i samo kolone koje želimo da dohvatimo iz tabele i tomožemo u SQL-u uraditi pomoću upita SELECT kolona1, kolona2 FROM tabela, a ovde ćemoto uraditi na sledeći način:

62

Page 64: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

DB: : t ab l e ( ’ k o r i s n i c i ’ )−>s e l e c t ( ’ kolona1 ’ , ’ kolona2 ’ )−>get ( ) ;

Metod where() zamenjuje klauzulu WHERE u SQL upitima. Ukoliko želimo da prevedemoSQL upit SELET * FROM tabela WHERE kolona = ’vrednost’, sintaksa će biti:

DB: : t ab l e ( ’ t abe l a ’ )−>where ( ’ kolona ’ , ’ vrednost ’ )−>get ( ) ;

U where() funkciji možemo navesti i operator provere na sledeći način:

DB: : t abe l e ( ’ t abe l a ’ )−>where ( ’ kolona ’ , ’ operator ’ , ’ vrednost ’ )−>get ( ) ;

Ukoliko želimo da realizujemo SQL kod: SELECT * FROM tabela WHERE kolona > 5, tomožemo učiniti:

DB: : t ab l e ( ’ t abe l a ’ )−>where ( ’ kolona ’ , ’> ’ , 5)−>get ( ) ;

Ukoliko želimo da navedeno više uslova to je moguće realizovati tako što ćemo podatkenavoditi u okviru niza podataka, a svaki od njih će biti oivičen još jednim uglastim zagradama [i ] . Ovo možemo zamisliti kao niz nizova, a implementaciju možemo izvršiti na sledeći način:

DB: : t abe l e ( ’ t abe l a ’ )−>where ( [

[ ’ kolona_1 ’ , ’ uslov_1 ’ , ’ vrednost_1 ’ ] ,. . .[ ’ kolona_n ’ , ’ uslov_n ’ , ’ vrednost_n ’ ]

] )−>get ( ) ;

Sve kolone napisane u where() metodi se spajaju AND operatorom. Ukoliko uslove želimoda spojimo OR operatorom onda koristimo metor orWhere() i implementira se:

DB: : t ab l e ( ’ t abe l a ’ )−>where ( ’ kolona1 ’ , ’ us lov1 ’ , ’ vrednost1 ’ )−>orWhere ( ’ kolona2 , ’ us lov2 ’ , ’ vrednost2 ’ )−>get ( ) ;

Ukoliko želimo da potražujemo kolonu koja ima neku od prosleđenih vrednosti iz liste vred-nosti, onda koristimo metodu whereIn() i sintaksa će biti:

63

Page 65: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

DB: : t ab l e ( ’ t abe l a ’ )−>where ( ’ id ’ , [ 1 , 2 , 3 ] )−>get ( ) ;

Umesto ORDER BY naredbe, ovde se koristi metoda orderBy() kojoj se prosleđuju dvaparametra. Prvi parametar je kolona prema kojoj želimo da vršimo sortiranje, a drugi parametarje da li želimo da sortiranje bude u rastućem (asc) ili opadajućem (desc) poretku. Ova metodase implementira na sledeći način:

DB: : t ab l e ( ’ t abe l a ’ )−>orderBy ( ’ kolona ’ , ’ desc ’ )−>get ( ) ;

Takođe postoje i metode limit() i offset() koje služe kao i u SQL-u, ukoliko želimo daograničimo broj podataka koji će biti prikazan.

Spajanje tabela iz baze je i sada regulisano, samo što se umesto INNER JOIN sentence koristimetod join().Na isti nažin je regulisan i LEFT JOIN, samo što se koristi metoda leftJoin().SQL komandna linija:

SELECT ∗ FROM tabe la1INNER JOIN tabe la2ON tabe la1 . id = tabe la2 . id

je zamenjena linijom:

DB: : t ab l e ( ’ tabe la1 ’ )−>join ( ’ tabe la2 ’ , ’ t abe la1 . id ’ , ’= ’ , ’ t abe la2 . id ’ )−>get ( ) ;

Još jedna od osnovnih metoda je insert() koja ima istu namenu kao INSERT u SQL upitimai služi za dodavanje elemenata (redova) u bazu podataka. Ona se implementira tako što senazivi kolona prosleđuju kao ključevi, a vrednosti atributa se prosleđuju kao vrednosti mape(asocijativnog niza). Ukoliko želimo da dodamo više redova u bazu podataka, onda to činimopraveći nezavisne mape u okviru insert-a i to na sledeći način:

DB: : t ab l e ( ’ t abe l a ’ )−>i n s e r t (

[ ’ kolona1 ’=>’ vrednost1 ’ , ’ kolona2 ’=>’ vrednost2 ’ ] ,[ ’ kolona1 ’=>’ vrednost3 ’ , ’ kolona2 ’=>’ vrednost4 ’ ] ,. . .[ ’ kolona1 ’=>’ vrednostN ’ , ’ kolona2 ’=>’ vrednostM ’ ]

) ;

Ukoliko želimo da vršimo izmene (ažuriranja) u nekom od redova, to možemo učiti UPDATEnaredbom koja se vrši metodom update(). U ovoj metodi se mora navesti tačno polje u tabeli

64

Page 66: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

koje želimo da promenimo i vrednost koju želimo da to polje ima. Implementaciju ćemo izvršitina sledeći način:

DB: : t ab l e ( ’ t abe l a ’ )−>where ( ’ id ’ , 1 )−>update ( [ ’ kolona1 ’=>1, ’ kolona2 ’=>’ Je l ena ’ ] ) ;

I na kraju naredba DELETE koja se vrši metodom delete() i služi za brisanje redova iztabele. Kada brišemo red, mora se tačno precizirati koji red u tabeli želimo da izbrišemo, asintaksa za to je:

DB: : t ab l e ( ’ t abe l a ’ )−>where ( ’ id ’ , 1 )−>delete ( ) ;

6.15 Eloquent ORM u Laravelu

U poglavlju 5.5 već je bilo reči o moćnom Laravelovom alatu Eloquent ORM. Ovo poglavlje ćese nadovezati na prethodna poglavlja o modelima u Laravelu i proširiće sliku o korišćenju istihu Laravel aplikacijama.Za početak, treba kreirati Eloquent model. Kao i u prethodnim poglavljima, i ovde ćemo modelesmeštati u folder app/Models i svi oni će nasleđivati klasuIlluminate/Database/Eloquent/Model.Klasu modela možemo praviti na dva načina. Prvi način je kreirati je "ručno" u folderu app/-Models:

c l a s s NazivModela extends Model{

. . .}

A drugi način je kreirati je uz pomoć Artisan alata, komandom:php artisan make:model NazivModela koju treba otkucati u komandnoj liniji.Ako na primer napravimo model Korisnici u komandnoj liniji treba otkucati:php artisan make:model Korisnici. Nakon izvršenja ove linije koda, Eloquent će automatskinapraviti tabelu korisnici u bazi podataka. Dakle, nije potrebno povezivati klasu sa tabelom,već će se to automatski izvršiti uz kreiranje modela.Svaka ovako napravljena tabela automatski dobija primarni ključ, kolonu koja se naziva id, aliova kolona se može i preklopiti nekom drugom kolonom koja će je zameniti.

Iako su svi metodi koji su dostuoni u Query Builder-u, dostupni su i ovde, i pored toga ćebiti predstavljeni metodi koji su karakteristični za Eloquent.

Ukoliko želimo da vratimo sve podatke iz neke tabele, to možemo vrlo jednostavno učinitimetodom all() na sledeći način:

Kor i sn ik : : a l l ( ) ;

65

Page 67: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Za dohvatanje elementa prema primarnom ključu tabele možemo koristiti metodu find()koju možemo implemetirati:

Kor i sn ik : : f i nd ( 1 ) ;

Kao i kod Query Builder-a i ovde imamo mogućnos korišćenja metode where() koja serazlikuje u tome da ovde statičku metodu pozivamo iz klase Korisnik, u našem slušaju, pa nemoramo da navodimo naziv tabele kao što smo to radili u Query Builder-u. Umesto da kodmetode where() izgleda:

DB: : t abe l e ( ’ k o r i s n i c i ’ )−>where ( ’ kolona ’ , ’ operator ’ , ’ vrednost ’ )−>get ( ) ;

Ovaj kod se u Eloquent-u može elegantnije napisati:

Kor i sn ik : : where ( ’ kolona ’ , ’ operator ’ , ’ vrednost ’)−>get ( ) ;

Ukoliko želimo da kreiramo novog korisnika u SQL-u nam je potrebna komanda INSERT. UEloquent-u to nije slučaj, već novog korisnika možemo kreirati kao novu instancu klase i dodelitimu odgovarajuće vrednosti. Nakon dodele vrednosti, korisnika treba sačuvati u bazu podataka ito na sledeći način:

$ ko r i s n i k = new Kor i sn ik ;$kor i sn ik−>ime = ’ Je l ena ’ ;$ko r i sn ik−>prezime = ’M’ ;$kor i sn ik−>save ( ) ;

Ukoliko sada želimo da izvršimo neku izmenu, to jednostavno možemo uraditi tako što poljudodelimo drugu vrednost:

$ko r i sn ik−>prezime = ’ Matej ic ’

Kao što je već bilo rečeno, uobičajeno je da Eloquent sam dodeljuje primarni ključ (id) ion je auto-increment. Dakle, moguće je da potražujemo $korisnik->id polje (vrednost), jer juje Eloquent sam dodelio umesto nas. Dakle, kada kreiramo instancu $korisnik, nije potrebnododeljivati nikakvu vrednost atributu id (čak ni vrednost null koju smo morali dodeljivati kodINSERT upita Query Builder-a). Ukoliko želimo da promenimo ovu opciju to je moguće uradititako što podesimo incrementing osobinu primarnog ključa na false.Kao alternativu koda iz prethodnog primera, možemo koristiti metodu create(). Ova metodaima potpuno istu funkcionalnost kao i INSERT upit i opet nije potrebno polju id dodeljivatinikakvu vrednost, ukoliko nismo eksplicitno naglasili suprotno:

User : : c r e a t e ( [ ’ ime ’=>’ Je lena ’ , ’ prezime ’=>’M’ ] ) ;

Ukoliko želimo da vršimo UPDATE upit nad ovakvom vrstom unosa, onda to možemo učinitina sledeći način:

66

Page 68: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

User : : where ( [ ’ ime ’=>’ Je lena ’ , ’ prezime ’=>’M’ ] )−>update ( [ ’ prezime ’=>’ Matej ic ’ ] ) ;

Ukoliko želimo da primenimo DELETE upit, to možemo uraditi na više načina, u zavisnostiod toga koji efekat želimo da postignemo. U sledećem primeru su redom dati: brisanje korisnikaprema id-u, brisanje korisnika prema nekom uslovu, brisanje korisnika prema id-u i brisanje višekorisnika od jednom prema unetim id-evima.

Kor i sn ik : : f i nd ( id_kor i sn ika)−>delete ( ) ;Kor i sn ik : where ( ’ id ’ , ’< ’ , 5)−>delete ;Kor i sn ik : des t roy ( id_kor i sn ika ) ;Kor i sn ik : des t roy ( id_1 , . . . , id_n ) ;

Preostalo je objasniti kako se realizuju JOIN upiti. U Eloquent-u je način realizovanja ovihupita objektno orijentisan. Prisetimo se da smo pri kreiranju veza, kreirali odgovarajuće funkcije(metode) u klasama tabela koje smo povezivali. Umesto da koristimo klasično spajanje tabelaJOIN upitima, ovde ćemo iskoristiti kreirane funkcije kako bismo spojili tabele.Kada želimo da u pivot tabelu (međutabelu) dodamo neku vrednost, mi koristimo rezervisanufunkciju ->attach(). Ukoliko želimo da iz pivot tabele izbrišemo neku vrednost onda možemokoristiti rezervisanu funkciju ->detach() i brisanje će biti izvršeno.Evo jednog primera iz projekta za elektronsko učenje, kako je korišćen Eloquent-ov JOIN upiti ->attach() i ->detach() fukcije. Već smo ranije napravili relaciju više prema više izmeđutabele korisnik (engl. user) i kurs(engl. course). Sada je naš zadatak da "dohvatimo" prijavl-jenog korisnika (Auth::user()), a potom tog korisnika ga prijavimo da pohađa kurs (studies()->attach($course)). Podsetimo se da smo metodu studies() napravili u klasi User i da je služilada nas poveže sa pivot tabelom course_user.

$user = Auth : : user ( ) ;$user−>s tud i e s ()−>attach ( $course ) ;

Ukoliko sada želimo da korisnika odjavimo sa kursa, to možemo učiniti ranije pomenutomdetach() funkcijom, što bi izgledalo:

$user−>s tud i e s ()−>detach ( $course−>id ) ;

Na isti način bi smo koristili i jedan prema više vezu. Evo sada jednog nešto drugačijegprimera primenjenog nad ranije napravljenom jedan prema više vezom. Primer je takođe izaplikacije za elektronsko učenje, i njegov cilj je da u promenljivi kursevi (engl. $courses) sačuvasve kurseve koje predaje (->teaches()) prijavljeni predavač (Auth::user()).

$ cour s e s = Auth : : user ()−>teaches ;

67

Page 69: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

7 Opis i izrada aplikacije za elektronsko učenje u Laravel razvo-jnom okruženju

Aplikacija za elektronsko učenje, koja je prilog ovom master radu, izrađena je u Laravel razvo-jnom okruženju programskog jezika PHP. U prethodnoj oblasti 6 Osnove Laravel razvojnogokruženja opisano je kako se kreira projekat u Laravel-u i kako se rukuje osnovnim strukturamaovog razvojnog okruženja. Stoga ovde neće biti reči o tome kako je kreiran projekat i kako jekoja klasa pojedinačno kreirana i koja je sadržina svake od njih. Ovo poglavlje će biti fokusir-ano na tome koja je funkcionalnost izrađene aplikacije, koje su njene sastavne strukture, kojimkorisnicima i u koje svrhe je ona namenjena.

Pomenuta aplikacija za elektronsko učenje ima radni naziv Pripremi Se i namenjena je zapripremu prijemnih ispita za različite fakultete. Učenici se za prijemni ispit mahom pripremajuu samostalnoj režiji, na privatnim časovima ili na organizovanoj pripremnoj nastavi koja seodržava na fakultetima. Ideja Pripremi Se aplikacije leži u tome da se učenici mogu priprematina savremen i njima blizak način - putem interneta. Internet je danas dostupan gotovo na svimtačkama zemaljske kugle, tako da gde god se nalazili možemo da pristupamo online sadržajimaukoliko imamo internet konekciju. Upravo na taj način bi učenici iz svojih fotelja, ma gde senalazili, mogli da unapređuju svoja znanja i pripremaju se za svoje buduće zanimanje. Elektron-ska priprema prijemnih ispita donosi višestruke benefite, neki od njih su:

• Ušteda vremena ukoliko polaznici žive na lokaciji koja je udaljena od mesta pripreme.Neretko učenici žive u drugim gradovima, pa im je potrebno da izdvoje i po par sati da bistigli na pripremnu nastavu i vratli se svojim kućama.

• Ušteda novca je povezana sa prethodnim benefitom, jer putovanja međugradskim prevo-zom nisu jeftina, a ne treba zaboraviti da je nekada potrebno putovati i više puta u tokuradne nedelje. Takođe, pripremna nastava u privatnoj režiji je verovatno daleko skupljanego što bi to mogla biti priprema u elektronskom formatu.

• Učenici se ne moraju prilagođavati grupi i tempu koji grupa nameće, već lekcije mogu"slušati" tempom koji njima odgovara

• Lekcije mogu "preslušavati" onoliko puta koliko im je potrebno, što nije slučaj saprivatnom nastavom ili pripremnom nastavom organizovanom na fakultetu, gde se jednomodržane lekcije ne ponavljaju

• Materijali su dostupni u bilo koje doba dana ili noći pa svoje dnevne obaveze nemoraju prilagođavati organizovanoj pripremnoj nastavi

• Učenici nastavu mogu "pohađati" sa bilo koje lokacije, jedino je bitno da imajupristup internetu, kako bi mogli da pristupe materijalima kursa

68

Page 70: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

7.1 Početna strana

Dobrodošli na početnu stranu Pripremi Se aplikacije koja je namenjena elektronskoj pripremiprijemnih ispita. Kao što je od ranije poznato, početna strana ili početni pogled, nalazi sena adresi http://127.0.0.1:8000/. Ovu adresu dobijamo nakon instaliranja Laravel projekta tj.pokretanjem servera (php artisan serve) i njoj pristupamo svaki put kada želimo da otpočnemonjegovo korišćenje kao korisnik. Početna strana (view) se nalazi zajedno sa ostalim pogledimakoje kreiramo u folderu app/resources/views i njen podrzaumevani naziv je welcome.blade.php.Na slici 17 smo imali priliku da vidimo kako originalno izgleda ovaj pogled, po instalaciji Lar-avel projekta. Ovaj pogled je moguće prema potrebama izmeniti i prilagoditi njegov izgled.Upoređivanjem slike 17 i slike 26 možemo uočiti da su napravljene znatene izmene u odnosu napodrazumevani izgled welcome.blade.php strane.Na početnoj strani se nalazi dobrodošlica i pretraživač, pomoću koga korisnik može pretražitikoje to kurseve može naći u aplikaciji. Pretraživanje se vrši jednostavnim unosom reči, nakončega se u padajućoj listi prikazuju nazivi kurseva koji sadrže unetu reč. Ukoliko ne postoji kurssa zadatom reči, u padajućoj listi neće biti rezultata.Korisnik ne može videti detalje o kursevima iz padajuće liste sve dok se ne registruje ili prijavikao učenik.

U gorenjem desnom uglu početne stranice se nalaze dva dugmeta (linka), za prijavu i reg-istraciju korisnika. Ukoliko korisnik nije ranije bio registrovan, da bi mogao da se prijavi i vidiostale funkcionalnosti aplikacije, najpre mora da se registruje. Ukoliko je već registrovan, koris-nik se može jednostavno prijaviti pomoću email-a i lozinke koje je ranije definisao i koristio uovoj aplikaciji.

Slika 26: Početna strana (welcom.blade.php)

69

Page 71: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

7.2 Registracija novog korisnika i njegova prijava

U ovom odeljku biće reči o tome kako se korisnik može registrovati i prijaviti, kako bi mogao daiskoristi sve dostupne funkcionalnosti aplikacije.

Pre svega, bitno je reći da Laravel nudi veliki broj gotovih komponenti koje znatno olakšavajui ubrzavaju izgradnju aplikacije. Jedne od takvih komponenti su one koje nam omogućavajusigurnu prijavu i registraciju. Laravel na veoma lak i jednostavan način kreira sve što nam jeneophodno za autentifikaciju, primenom Artisan alata i komande:php artisan make:authOvu komandu treba koristiti na tek napravljenoj aplikaciji i ona će nam omogućiti kreiranje svihonih pogleda koji su nam neophodni za autentifikaciju. Tu se pre sega misli na view koji jenamenjen registraciji i prijavi korisnika.

Slika 27: Registracija korisnika

U aplikaciju se nije moguće prijaviti ukolikoniste prethodno registrovani korisnik. Reg-istrovanje se može izvršiti linkovanjem sapočetne strane Laravel projekta ili ukolikosmo na stranici za prijavu postojećegkorisnika onda registraciju možemo izvršitiklikom na Registracija novog korisnikalink. Prilikom registracije korisnik trebada unese osnovne informacije o sebi i daobavezno izabere rolu. Rolu administratoranije moguće odabrati u listi, jer nju jedinomože da dodeli neko sa administratorskomprivilegijom. Takođe, administrator možeimati uvid u role korisnika, dodati ilioduzeti nekome privilegiju, kao i dodavatinove administratore u sistem. Administra-tor može dodati i novog korisnika u sistemi dodeliti mu privilegije.

Kada smo uneli podatke u formu i kliknuli da dugme Registracija sa pogleda (na kome senalazi forma za registraciju) se podaci prosleđuju kontroleru koji proverava da li su svi podaci is-pravno uneti i ukoliko jesu, onda se obraća modelu koji vrši upis novog korisnika u bazu podataka.

Ukoliko kontroler (definisani metod u kontroleru) proceni da podaci nisu adekvatno uneti,podaci se ne prosleđuju modelu, već se odgovarajuća greška vraća pogledu. Konkretno u ovojformi,zahteva se da ime, prezime i šifra budu duži od 2 karaktera, da email bude u odgovara-jućoj formi, da se obavezno odabere rola ili obe role i da šifra i ponovljena šifra budu identične.Ukoliko neki unos ne zadovoljava navedena pravila, pojaviće se poruka koja će signalizirati kojiod unosa korisnik treba korigovati, ili ukoliko je neko polje prazno, koje to polje treba popuniti.

70

Page 72: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Pošto je registracija uspešno izvršena, korisnik može pristupi formi za prijavu.

Slika 28: Prijava korisnika

Prijavljivanje se u aplikaciji vrši na istinačin za bilo koju od navedenih rola (biloda je neko administrator i/ili predavač i/ilistudent). Prijavljivanje se vrši unošenjememail-a i šifre (lozinke) u formu za prijavu.Ukoliko su email i šifra ispravno uneti,korisnik dobija pristup funkcionalnomdelu aplikacije. U zavisnosti od privilegijakoje prijavljeni korisnik ima biće prikazanadministratorksi i/ili predavački i/ili deonamenjen studentu. Postoji mogućnostda neki korisnik ima privilegiju za više odjedne role, pa na primer može istovremenobiti i predavač i student, pa će mu nakonprijave biti prikazana aplikacija sa de-lovima namenjenim predavaču i delovimanamenjenim studentu.

Ukoliko želi, korisnik nakon prijave može dodati neke informacije (kontakt telefon ili datumrođenja), a takođe može i izmeniti neke informacije (ime, prezime ili lozinku). Ove informacijemože promeniti u navigacionom baru, u odeljku za Podešavanje naloga.

7.3 Nivoi pristupa u aplikaciji

Aplikacija za elektronsko učenje Pripremi Se se sastoji iz tri dela (tri role):

• Deo namenjen administratoru

• Deo namenjen predavaču

• Deo namenjen studentu

Svaka od ovih rola ima drugačiji nivo pristupa. Administrator sistema ima najviši nivo pris-tupa i najviše privilegije u sistemu, potom sledi predavač i na dnu piramide je student. Detaljnijeo svakoj od navedenih rola biće reči u daljim poglavljima.

Ma koji nivo pristupa korisnik imao, on može da podešava svoj nalog. Podešavanje nalogaje obavezan deo menija (prikazan je na slici 29). Korisnik može izmeniti neke od postojećihinformacija o sebi (videti sliku 30). Nije moguće vršiti izmene email-a zbog moguće zloupotrebei takođe nije moguće da korisnik sam sebi promeni rolu.Što se tiče promene šifre (videti sliku 31), da bi korisnik mogao da promeni šifru najpre jepotrebno da unese svoju trenutnu šifru, a potom da unese novu šifru i ponovi je. Ukoliko neunese ispravno svoju trenutnu šifru ili nova i ponovljena šifra ne budu iste, promenu šifre nijemoguće izvršiti.

71

Page 73: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Slika 29: Podešavanje naloga

Slika 30: Moje informacije Slika 31: Promena šifre

Takođe, ma koju rolu korisnik imao, nakon prijave dolazi na početnu stranu. Ovo je stranadobrodošlice, potvrđuje da je korisnik uspešno prijavljen i na ovoj strani korisnik može pretražitikurseve. U tabeli koju možete videti prikazane su samo osnovne informacije o kursu, a klikomna kurs dobijaju se detaljnije informacije o odabranom kursu. U ovim detaljnijim informacijamane mogu se videti lekcije koja ovaj kurs nudi, ali se može videti opširniji opis kursa, njegovipredavači i tome slično.

Slika 32: Početna strana nakon prijave korisnika

72

Page 74: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

7.3.1 Administrator

Delu namenjenom administratorima sistema mogu da pristupaju korisnici kojima je dodeljenarola administratora. Administrator ima najviše privilegije u sistemu i njegov meni u aplikaciji sesastoji iz tri dela Početna strana, Upravljanje korisnicima - Korisnici i Upravljanje kursevima- Kursevi. Na predstojećoj slici možete videti kako izgleda početna strana nakon prijavljivanjabilo koga od korisnika. Iako se meni razlikuje u zavisnosti od privilegija, početna strana je svimkorisnicima ista.

Kao što već znamo, administrator sistema može imati uvid u sve korisnike i dodavati novekorisnike sistema. Ove akcije može obavljati u Korisnici opciji menija.Pri dodavanju novog korisnika potrebno je upisati sve informacije o korisniku kao što bi tokorisnik mogao da učini prikom svoje registracije. Razlika je u tome što je ovde moguće korisnikudodeliti administratorsku dozvolu i postoje opciona polja (datum rodjenja i broj telefona) kojenije neophodno popuniti.U prethodno pomenutoj tabeli korisnika, korisnike je moguće pretraživati po ma kom kriterijumu,vršiti sortiranje podataka po kolonama i prikazati određeni broj podataka u okviru jedne strane.Sve ove opcije pretraživanja i sortiranja se nalaze na vrhu tabele (videti sliku 33).

Slika 33: Strana za upravljanje korisnicima u administratorskom delu

Sve ove operacije pretrage, ograničenog broja prikaza elemenata, kao i sortiranje po svakoj odkolona, omogućuje funkcija DataTable() koja se implementira JavaScript jezikom i jednostavnose priključuje svakoj od tabela. Funkciju je potrebno pozvati u JavaScript eksternom fajlu ilidelu koda koji je namanjen njemu. Obavezno je u funkciji naglasiti na koju tabelu se ona odnosi,kako bi DataTable() bio primenjen na željenoj tabeli.Takođe, podsetimo se da se i u ovom (kao i u svakom drugom) pogledu koristi Laravelov moćnialat blade, pa je JavaScript kod potrebno navesti u okviru za blade katrakteristične sekcije@section(’js’) ... @end.Još jedna napomena, ukoliko sa Laravelom nije došao fajl koji podržava DataTable(), onda jepotrebno preuzeti ga sa interenta i dodati, a u public/css i public/js fajlovima dodati putanje dopreuzetih fajlova.

73

Page 75: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

JavaScript kod koji implementira navedenu DataTable() funkciju izgleda ovako:.

@sect ion ( ’ j s ’ )<s c r i p t type=" text / j a v a s c r i p t ">

$ ( ’ [ data−t o gg l e=con f i rmat ion ] ’ ) . con f i rmat ion ({r o o t S e l e c t o r : ’ [ data−t o gg l e=con f i rmat ion ] ’ ,// o ther op t i ons

} ) ;$ ( document ) . ready ( func t i on ( ) {

$ ( ’#a l lU s e r s ’ ) . DataTable ( ) ;} ) ;

</s c r i p t >@end

Takođe, administrator može videti detalje o korisniku , vršiti izmene nad njim i obrisatiga, što se može videti u koloni Akcije na slici 33. Klikom na dugme za pregled ili editovanje,otvara se forma (videti slike 34 i 35) , a klikom na dugme za brisanje mini dijalog (videti sliku 36).

Slika 34: Forma za pregled po-dataka o korisniku (rola ad-ministrator)

Slika 35: Forma za izmenu po-dataka o korisniku (rola ad-ministrator)

Slika 36: Dijalog za brisanjekorisnika ( administrator)

Ukoliko korisnik, koga administrator pregleda, ima rolu predavač, tada će se pored informacijanavedenih na slici 34 prikazati i kursevi koje je taj korisnik kreirao. Sa druge strane, ukolikokorisnik ima rolu student, onda će pored informacija navedenih na slici 34 biti navedena i listakurseva koju student pohađa.Vratimo se sada na meni namenjen administratoru. U padajućem meniju Kursevi, moguće jeupravljati kursevima i kategorijama. Što se tiče kategorija, administrator može videti tabelusvih kategorija, vršiti njihovo sortiranje i pretragu. Pored podrazumevanih vrednosti, u tabeli senalazi i kolona koja prebrojava koliko kurseva ima svaka od kategorija.

74

Page 76: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Slika 37: Strana za pregled kategorija (rola administrator)

Jedini administrator sistema ima privilegiju da dodaje nove kategorije, menja im naziv ibriše ih. Pri dodavanju novih kategorija vrši se ispitivanje da li takva kategorija postoji u bazipodataka i ukoliko postoji administrator dobija obaveštenje da takav naziv kategorije već postoji,tako da nema dupliranja u nazivima kategorija.

Ukoliko u podmeniju menija Kursevi odaberemo opciju Svi kursevi, onda dobijamo listu svihkurseva koje su generisali predavači. Privilegiju za kreiranje kurseva imaju jedino korisnici kojiimaju dodeljenu rolu predavača. Administrator može videti detalje o kursu, ko je kreator kursai koliko korisnika je prijavljeno na kurs. Ukoliko je kreator kursa dodelio više kategorija nekomkursu, administrator će moću da vidi sve kategorije. Što se tiče izmena, može jedino vršiti izmenukojim kategorijama pripada neki kurs, ukoliko primeti da je kurs bez kategorije ili proceni da nepripada određenoj kategoriji. Kao i do sada i ovde je moguće izvršiti brisanje.

Slika 38: Svi kursevi (rola administrator)

75

Page 77: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

7.3.2 Predavač

Ukoliko neki od korisnika ima rolu predavač, njegova glavna prednost u odnosu na administratorai studenta je u tome da može da kreira kurseve. Pored naziva kursa, opisa i cene, predavačmože fotografije i video materijale koji će sačinjavati kurs. Svaki kurs se može sastojati odniza lekcija, gde svaka od lekcija ima svoj naziv, opis i propratni video materijal. Na stranina kojoj predavač ima uvid u svoje kurseve, on može dodati, pregledati, izmeniti, obrisati kursi dodati mu novu lekciju. Ove akcije se nalaze među akcijama u tabeli kurseva. Forme zadodavanje, pregled, izmenu i brisanje lekcije su veoma slične kao što smo imali priliku da vidimou administratorskom delu. Stoga, neću se puno zadržavati na ovim formama. Specifično zapredavački deo aplikcije jeste dodavanje nove lekcije kursu. Dodavanje nove lekcije se možeobaviti na dva načina: dugmetom za pregled kursa ili dugmetom za dodavanje, koji se nalaze uakcijama tabele (videti sliku 39).

Slika 39: Moji kursevi (rola predavač)

Detalji o kursu sadrže standardni opis kursa, ispod koga se mogu dodati lekcije i može seimati uvid u do sada napravljene lekcije.

Slika 40: Detalji o kursu (role predavač i student)

76

Page 78: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Kada se pogleda stranica do kraja ili kada se meni sa slike 40 "sklopi", možemo bolje videtitabelu koja sadrži do sada kreirane lakcije.

Slika 41: Pregled lekcije koja je priložena uz kurs (role predavač i stident)

Klikom na pregled lekcije otvara se opis lekcije i može se pregledati video materijal koji jepriložen uz lekciju. Lekciju je moguće menjati, brisati i pregledati beskonačno mnogo puta.

Slika 42: Lekcije koje odabrani kurs sadrži (role predavač i student)

77

Page 79: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

7.3.3 Student

Iako su na dnu piramide privilegija, studenti su korisnici kojima je ova alikacija namenjena.Studenti u meniju imaju tri opcije. Prva od njih je podrazumevana Početna strana, a drugaod njih je Kursevi koje slušam. Klikom na ovu stavku menija, otvara se prozor u kome senalazi tabela kurseva koje student sluša. Student može samo da vrši pregled sadržaja kursevana koje je prijavljen. Pregled sadržaja izgleda isto kao i kod predavača, o čemu je bilo reči uprethodnom odeljku (videti slike 41 i 42).

Slika 43: Kursevi koje učenik sluša (rola student)

Druga opcija koju meni nudi jeste pretraživanje svih kurseva koji postoje u aplikaciji. Od-abirom ove opcije pojavljuje se tabela koja daje kratke informacije o svakom od kurseva i da lije korisnik prijavljen na taj kurs ili ne. Klikom na željeni kurs, korisnik može dobiti detaljnijeinformacije o njemu i može se prijaviti na kurs ili se odjaviti sa kursa. Dokle god korisnik nijeprijavljen na kurs on ne može videti sve materijale koje je predavač postavio. Pošto se prijavina kurs, kurs će biti prikazan u podmeniju Moji kursevi i student će moći da pristupi svimlekcijama ovog kursa.

Slika 44: Pogled za pretraživanje svih kurseva (rola student)

78

Page 80: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

8 Zaključak

Programski jezik PHP je stekao veliku popularnost u poslednje dve decenije i postao je najpop-ularniji programski jezik za izradu web aplikacija. U ovom master radu ste imali prilike da seupoznate sa programskim jezikom PHP, MVC arhitekturom, kao i Laravel razvojnim okruženjemi Pripremi Se projektom koji je, kao prilog ovom radu, izrađen u razvojnom okruženju Laravel.U radu su definisane najosnovnije sastavne komponente poput modela, pogleda, kontrolera, ru-tiranja i rada sa bazom podataka. Svaka od navedenih komponenti je primenjena na brojnimpraktičnim primerima, tokom izrade aplikacije.

Iako danas postoji široka lepeza razvojnih okruženja, koje okruženje ćemo odabrati, najčešćezavisi od afiniteta korisnika ili od potreba aplikacije. Kao apsolutnom početniku, moj izbor jebio Laravel zbog jednostavnosti učenja, velike popularnosti, široke zajednice programera, kao ibrzog i jednostavnog razvoja projekta.

Iako je svaki početak u radu težak, na kraju priče, bih naglasila da upoznavanje sa Laravelomi rad u njemu nije bio toliko zahtevan i iscrpan. Upornost, podrška i istrajnost su nadjačali sveone teške i naporne trenutke u izradi projekta, pa se trud i rad na kraju isplatio.S obzirom na to da nikada pre nisam imala susret sa nekim PHP razvojnim okruženjem, napočtku rada mi je bila neobična njegova arhitektura i način na koji komuniciraju komponente uMVC arhitekturi. Međutim, nakon par dana iščitavanja dokumentacije, aktivnog rada i izradeaplikacije, rad u Laravelu je postao veoma intuitivan, pa je aplikacija sa puno elana privedenakraju. U izradi aplikacije su mi znatno pomogle i brojne komponente i funkcionalnosti kojenisam morala da sama izgrađujem od temelja, već sam mogla da ih priključim i prilagodim svomprojektu.

Kako elektronsko učenje predstavlja budućnost obrazovanja u savremenom društvu, bilo mije veliko zadovoljstvo i izazov da izradim aplikaciju namenjenu edukaciji i usavršavanju budućihstudenata. Pripremi Se aplikacija je objedinila moja znanja i veštine stečene tokom studija, aLaravel okruženje ih je nadogradilo u celinu.

79

Page 81: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

9 Literatura

1. Taylor Otwell, "Laravel - The PHP Framework For Web Artisans", www.laravel.com

2. Martin Brampton, Preview Online Code Files PHP 5 CMS Framework Development, 2010

3. George Schlossnagle, Advanced PHP Programming, 2004

4. Sanjib Sinha, Beginning Laravel: A Beginner’s Guide to Application Development, Apress,2016

5. Ruth Colvin Clark, Richard E. Mayer, E-Learning and the Science of Instruction: ProvenGuidelines for Consumers and Designers of Multimedia Learning, Pfeiffer, 2007

6. Visoka škola strukovnih studija za informacione i komunikacione tehnologije, Osnove Laravel-a, 2017

7. Laravel-AdminLTE, https://github.com/jeroennoten/Laravel-AdminLTE, septembar 2018

8. Iva Kitipova, Best PHP Frameworks of 2017: a Beginner’s Guide,https://www.webhostface.com/blog/best-php-frameworks-of-2017, jun 2017

80

Page 82: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Прилог 5/1

ПРИРОДНO - MАТЕМАТИЧКИ ФАКУЛТЕТ НИШ

КЉУЧНА ДОКУМЕНТАЦИЈСКА ИНФОРМАЦИЈА  

Редни број, РБР:

Идентификациони број, ИБР:

Тип документације, ТД: монографска Тип записа, ТЗ: текстуални / графички Врста рада, ВР: мастер рад Аутор, АУ: Јелена Матејић Ментор, МН: Иван Станковић Наслов рада, НР:

Развој апликацијa за електронско учење

коришћењем Laravel радног окружења  Језик публикације, ЈП: српски Језик извода, ЈИ: енглески Земља публиковања, ЗП: Р. Србија Уже географско подручје, УГП: Р. Србија Година, ГО: 2018. Издавач, ИЗ: ауторски репринт Место и адреса, МА: Ниш, Вишеградска 33. Физички опис рада, ФО: (поглавља/страна/ цитата/табела/слика/графика/прилога)

80 стр. ; граф. прикази

Научна област, НО: рачунарске науке. Научна дисциплина, НД: веб програмирање Предметна одредница/Кључне речи, ПО:

веб програмирање PHP MVC патерн Laravel радно окружење (framework) Електронско учење

УДК 004.045/056.55 004.43/.439 004.652 004.072/.072.6 004.42 004.422.2/.422.352 004.422.636/.423

Чува се, ЧУ: библиотека Важна напомена, ВН:

81 

Page 83: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

 

Извод, ИЗ: У овом мастер раду представљен је MVC патерн, програмски језик PHP и његово популарно радно окружење Laravel. Као прилог раду припремљена је апликација за електронску припрему пријемних испита, која је израђена коришћењем Laravel развојног окружења. Највећа пажња посвећена је самом развоју апликације, са приложеним бројним практичним примерима, као и моћним алатима Laravel радног окружења као што су: Composer, PHP Artisan, Blade i Eloquent ORM.

Датум прихватања теме, ДП: 04.07.2018.

Датум одбране, ДО: Чланови комисије, КО: Председник: Члан: Члан, ментор:

Образац Q4.09.13 - Издање 1   

82

Page 84: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Прилог 5/2

ПРИРОДНО - МАТЕМАТИЧКИ ФАКУЛТЕТ НИШ 

KEY WORDS DOCUMENTATION  

Accession number, ANO: Identification number, INO: Document type, DT: monograph Type of record, TR: textual / graphic Contents code, CC: university degree thesis (master thesis) Author, AU: Jelena Mаtejić Mentor, MN: Ivan Stanković Title, TI:

Development of e-learning applications with Laravel framework

Language of text, LT: Serbian Language of abstract, LA: English Country of publication, CP: Republic of Serbia Locality of publication, LP: Serbia Publication year, PY: 2018 Publisher, PB: author’s reprint Publication place, PP: Niš, Višegradska 33. Physical description, PD: (chapters/pages/ref./tables/pictures/graphs/appendixes) 80 p. ; graphic representations

Scientific field, SF: computer science Scientific discipline, SD: web programming Subject/Key words, S/KW: web programming

PHP MVC pattern Laravel framework E-learning

UC 004.045/056.55 004.43/.439 004.652 004.072/.072.6 004.42 004.422.2/.422.352 004.422.636/.423

Holding data, HD: library

Note, N:

83

Page 85: Razvoj aplikacija za elektronsko učenje korišćenjem ...unarske... · Univerzitet u Nišu Prirodno-matematički fakultet Departman za računarske nauke Master rad na temu: Razvoj

Abstract, AB: This master thesis presented MVC pattern, the programming language PHP and its popular framework Laravel. As a main attachment in this paperwork, there is an application for electronic preparation for the entrance exams, which was developed by Laravel framework. The greatest attention is paid to the development of the application, with a number of practical examples, as well as some very powerful tools of the Laravel framework such as: Composer, PHP Artistan, Blade and Eloquent ORM.

Accepted by the Scientific Board on, ASB: 04.07.2018.

Defended on, DE: Defended Board, DB: President: Member: Member,

Mentor:

Образац Q4.09.13 - Издање 1 

84