Visoka škola strukovnih studija za informacione i ... · Server, PostgreSQL, SQLite, MariaDB i...
Transcript of Visoka škola strukovnih studija za informacione i ... · Server, PostgreSQL, SQLite, MariaDB i...
Dr Nenad Koji
Visoka kola strukovnih studija zainformacione i komunikacione tehnologije
Framework
Predstavlja softver namenjen za podrku kreiranju razliitih vrsta aplikacija
Prednosti frameworka su postojanje velikog broja biblioteka i koda za veliki broj standardnih funkcionalnosti softvera (npr. rad sa bazama podataka, upravljanje sesijama, logovanje, stranienje, pravljenje template-a, ...)
Bolji framework-ci imaju ugraene elemente zatite U cilju zatite i standardizovane organizacije aplikacije,
koriste MVC patern design Danas se najvei broj koda koji je web orijentisan pie u
nekom framework-u Problem je razliita sintaksa kod pojedinih frameworka, i jo
nekoliko neusklaenih naina rada(podrke za AJAX, validaciju, module, autentifikaciju, vie baza podataka i sl. )
PHP framework
Zend FrameworkZend Framework je: Baziran na PHP kodu Objektno orijentisan Koristi MVC arhitekturu Ima doprinos u open source kodu, New BSD License Kreiran za rad sa veim brojem baza podataka
(MySQL, Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL, SQLite, MariaDB i Informix Dynamic Server)
Ovaj framework je postao vrlo atraktivan od verzije PHP5 kada se ukljuuje u bazine elemente objektne verzije PHP-a
Ima veliki zajednicu i veliki broj klasa, metoda i gotovog koda
Zend frameworkZend Framework komponente ukljuuju: Zend_Controller Ovaj modul omoguava kompletnu kontrolu nad aplikacijom. On prevodi
zahteve u specifine akcije i izvrava date aktivnosti. Zend_Db Ova komponenta je bazirana na PHP Data Objects (PDO) i omoguava pristup
bazi podataka na generiki nain. Zend_Feed Ova komponenta omoguava lak nain upotrebe RSS i Atom feeds. Zend_Filter Omoguavanje string-filtering funkcija kao to je isEmail() and getAlpha(). Zend_InputFilter Omoguava rad sa nizovima kao to su elementi forme. Zend_HttpClient Ovim se omoguava lak rad sa HTTP request-ovima. Zend_Json Omoguava se prebacivanja podataka iz PHP objekta u JSON format i obratno. Zend_Log Ovim se omoguava uoptena funkcija logovanja. Zend_Mail Omoguava slanje mail-ova. Zend_Mime Koristi se sa Zend_Mail da omogui dekodovanje MIME poruka. Zend_Pdf Omoguava kreiranje PDF dokumenata, kao i editovanje postojeih PDF fajlova. Zend_Search Omoguava se napredna pretraga. Zend_Service Sadri nekoliko podmodula koji omoguavaju pristup svim popularnim web
servisima. Zend_View Vri obradu delova koda koji se nalaze u view sekciji MVC paterna.
http://framework.zend.com/
http://www.zend.com/en/
Pre instalacije
Nakon preuzimanja framework-a, dobija se struktura foldera prikazana na slici
Nakon instalacije
Nakon uspene instalacije, posebna prezentacija, dobija se nova struktura
Za razliku od inicijalne, sada postoje dodatno kreirani folderi, osim Bin i Library i to: Application Docs Public Tests i XML fajl zfproject
application
Jedan od najbitnijih foldera je application U njemu se nalaze etiri foldera koja sadre kljuni
deo aplikacije: Configs Controllers Models Views i Fajl Bootstrap.php
application Configs sadri sva podaavanja za aplikaciju (putanje do
kontrolera, putanje do biblioteka, putanju do Bootstrap fajla, naine obrade greaka...)
Controllers Sadri spisak svih kontrolera aplikacije. Inicijalno se dobijaju dva (Index i Error), a svi koji se kasnije dodaju se smetaju ovde u formatu ImeController.php
Models Sadri spisak svih modela. Inicijalno nema ni jednog.
Views Sadri dva inicijalna foldera(Helpers i Scripts). U Helperima se smetaju odreene kompleksne funkcionalnosti, koje se uobiajeno koriste(formatiranje datuma, generisanje elementa forme, ...) dok se u Scripts nalaze view-ovi za napravljane kontrolere
Fajl Bootstrap.php Koristi se za inicijalizaciju komponenti u aplikaciji
bin Ovo je jedan od dva foldera koji se dobija prilikom
preuzimanja framework-a Inicijalno, ima etiri fajla
Poslednja tri fajla se koriste za pokretanje Zend framework-a, s tim to se za Windows koriste zf.bat izf.php dok se za Linux koriste zf.sh i zf.php.
Ovi fajlovi su inicijalno kopirani na mesto gde je php.exe fajl odreenog web servera.
docs
Ovaj folder slui za smetanje svih propratnih uputstava i dokumentacije, i nema upravljaku funkciju
library
U folderu library se nalazi folder Zend sa svimkomponentama framework-a, i predstavlja jezgro framework-a
Putanja do ovog foldera je ukljuena u sve bitnije konfiguracione fajlove
Spisak Zend componenti u folderu Library
public
U folderu public inicijalno se nalaze dva fajla .htaccess i index.php
Preporuljivo je da se u ovaj folder smeste svi dodatni statiki fajlovi aplikacije CSS, JavaScript, Images, ...
Fajl .htaccess upuuje korisnika koji pristupi aplikaciji na kontroler index.php
Inicijalni sadraj .htaccess-a je
Problemi sa .htaccess
esto se deava, da ba ovaj fajl pravi probleme prilikom inicijalnog rutiranja, ime se ne dobija akcija Index kontrolera, a ak i sakriva Public folder u web serveru
Reenje se moe pronai u dve opcije
1. Odkomentarisati opcijuLoadModule rewrite_module modules/mod_rewrite.so
u C:\xampp\apache\conf u httpd.conf
2. Promeniti sadraj .htaccess-a sa dodatnim uslovima
Unapreeni .htaccessSetEnv APPLICATION_ENV
development
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} -s [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} dRewriteRule ^.*$ - [NC,L]RewriteRule ^.*$ index.php [NC,L]
DirectoryIndex alert.phpDirectoryIndex alert.php
php_value include_path ".;C:\xampp\htdocs\zend\library"
index.php
Fajl index.php definie sve putanje (include paths) i za foldere aplikacije ali i Zend library-ja, i pokretanje aplikacije
Inicijalna struktura index.php fajla je data sa
index.php - Front controller pattern
Ovo je prvi (front) controller MVC Svi PHP zahtevi (requests) realizuju se kroz index.php stranu
(bootstrap file)
Ova stranica inicijalizuje pokretanje aplikacije i to: Inicijalizuje request/response objekte Obrauje standardne funkcionalnosti kao to su: Include paths Konfiguracije Lociranje MVC komponente Logovanje, rad sa bazama podataka, autorizaciju...
Konvertuje URL adresu u request objekat sa pojedinanim delovima
Rutira requests ka odgovarajuem kontroleru i njegovom metodu
Dohvata izuzetke
tests
Ovaj folder nudi mogunost da se kroz njega realizuje aplikacija u aplikaciji
Unutar njega se nalazi struktura foldera kao na slici
I predstavlja osnovno jezgro Zend okruenja da bi se unutar njega testirale pojedini delovi aplikacije koje programer pie, a eli da ih testira pre ukljuenja u finalni projekat
.zfproject
Ovaj XML fajl nalazi se u root-u kreiranog projekta Namena ovog fajla je da opie kompletnu strukturu aplikacije To podrazumeva definisanje svih kontrolera, svih metoda unutar
tih kontrolera, itd. Njegov update se realizuje ukoliko se koristi skup zf komandi iz
command-prompt moda
1. Korisnik ne poznaje strukturu aplikacije2. Korisnik zna URL adresu3. Controller zna da razume URL adresu i da aktivira sve bitne segmente4. URL adresa sadri domen, ime kontrolera(klasu) koji se poziva i ime metoda(action) u tom kontroleru5. Na osnovu ovih podataka Kontroler zna koji deo koda da aktivira
1. Nakon uspenog prepoznavanja delova URL adrese, i pokretanja odgovarajueg koda, korisnik eka da dobije odgovor od aplikacije2. Najee ovaj odgovor definie odreeni view, koji serverkom php procesoru dostavlja PHP kod, i nakon toga, procesor ga prevodi i vraa u formi HTML koda browseru korisnika
Princip rada framework-a
Da bi sve ovo funkionisalo kako je opisano, postoji veliki brojaaktivnosti koji treba uraditi
Da bi se programeru olakao rad, zato se koristi framework, koji najvei deo procedure oko komunikacije i prevoenja koda ima u svom jezgru
Da bi programer ispravno koristio framework, mora striktno da potuje organizaciju i nain ureenja koda
To podrazumeva pisanje sopstvenog koda u skladu sa predvienim nainima komunikacije izmeu razliitih fajlova, definisanje imena fajlova u skladu sa pravilima, snimanje fajlova u definisane foldere i korienje predvienih sintaksnih pravila za komunkaciju sa framework-om
ta prvo?Za poetak:
0. Organizovati aplikaciju, definisati HTML organizaciju, pratei CSS, definisati statike sadraje divova i jasno definisati koji divovi dobijaju dinamiki sadraj i ta on konkretno predstavlja. Ovo je opisano u posebnoj prezentaciji.
1. Napraviti kontroler(e)2. Napraviti metodu(e) u kontrolerima3. Realizovati rutiranje ako je potrebno4. Kreirati view-ove5. Ispravno prihvatiti sve podatke od korisnika i pripremiti ih za
obradu6. Kreirati stranice sa sopstvenim obavetenjima o grekama7. Kreirati modele
Kreiranje novog kontrolera pod imenom account je: zf create controller account Ovo se kuca nakon pozicioniranje u folder gde se nalazi
ceo projekat( u ovom sluaju folder zend u htdocs-u)
Kreiranje novog kontrolera
1
Nakon kreiranja kontrolera...
Kreiranje sopstvenog kontrolera, dobijaju se inicijalno dva metoda init() i indexAction. Ukoliko se prilikom prozivanja url adrese ne precizira metod, nego samo kontroler account, prvo se realizuje kod metoda init() pa index().
Dodavanje metoda(action)
Nakon definisanje jednog ili veeg broja kontrolera, potrebno je definisati konkretne metode tj. action-e u tim kontrolerima
Ovo kreiranje se takoe realizuje kodom U sluaju da se kontroleru account eli dodeliti metod
success, pie se ta se kreira (action), njegovo ime(success) i ime kontrolera kome se pridodaje(account)
zf create action success account
Kreiranje novog metoda(action)
2
Dodavanje vie metoda...
Ukucavanjem jo dve linije kodazf create action new accountzf create action activate account
kontroleru account dodaju se jo dva metoda
Routing u Zend Framework-u
Rutiranje je sastavni deo Zend framework-a i definie pozadinsku logiku koja definie koji deo koda pozvati u kome trenutku, a nakon inicijalizacije URL adrese
Meutim, vrlo esto se u realnim situacijama programeru namee potreba da vrlo opisnim imenima definie imena kontrolera, a jo ee metoda, da bi jasno znao ta koji metod radi
Ovo je sa druge strane loe da vidi i korisnik Pretpostavimo da postoji kontroler Korisnici, i metod
prikaz_svih_korisnika_za_unetu_oznaku_studijskog_programa
Ovako rogobatno ime je vrlo dobro za programera ali nona mora za korisnika
Rutiranje unutar framework-a
3
Ovo se moe reiti naprednim rutiranjem Naime, Front Controller, koji je za nas stranica index.php, definie i
inicijalno rutira sve pristigle zahteve Ideja:
Ovom kontroleru naglasiti da korisnik moe da unese neki lepi naziv tipa prikaz_studenata, a da posebna logika ovo rutira ka kontroleru i metodu koji je napisao programer
Reenje:Zend je kreirao posebnu klasu Zend_Controller_Router_Route, koja ima dva ulazna parametra, i koja se koristi za interno rutiranje
Da bi se ovo reenje realizovalo, potrebno je dodati poseban deo koda u index.php stranu, i naglasiti da dolazna URL adresa 127.0.0.1/korisnici/ prikaz_studenata treba da uita kodKorisnici::Prikaz_svih_korisnika_za_unetu_oznaku_studijskog_programaAction()
Dodatni deo koda pie se na dnu strane index.php a pre linije koda $application->bootstrap()->run();
Unapreeni index.php...// Create application, bootstrap, and run$application = new
Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
$FrontController = Zend_Controller_Front::getInstance();$Router = $FrontController->getRouter();
$Router->addRoute("prikazStudenata",new Zend_Controller_Router_Route
("korisnici/prikaz_studenata", array
("controller" => "korisnici","action" =>
"prikaz_svih_korisnika_za_unetu_oznaku_studijskog_programa)
));
$application->bootstrap()->run();
Efekat rutiranja Ukucavanjem od strane korisnika
127.0.0.1/korisnici/ prikaz_studenata
Front kontroler pronalazi instancu Zend_Controller_Router_Routei saznaje da se umesto oekivanog metoda prikaz_studenata(kontrolera korisnici), uitava sadraj drugog metoda, istog kontrolera, sa nazivom prikaz_svih_korisnika_za_unetu_oznaku_studijskog_programa
Ako pretpostavimo da je programer napisao view, za originalni metod, i snimio ga u application/views/scripts/korisnici/ pod oekivanim imenom prikaz_svih_korisnika_za_unetu_oznaku_studijskog_programa.phtml, korisniku e se u browseru prikazati sav sadraj koji ovaj view generie, a da pri tome korisnik ni jednog trenutke nee znati da je kontaktirao metod prikaz_svih_korisnika_za_unetu_oznaku_studijskog_programa
Rutiranje sa parametrima U realnim sluajevima, obraanje metodu je sa prosleivanjem
nekog (ili vie) parametra URL adresa za prikaz studenta na smeru IT bi bila
127.0.0.1/korisnici/ prikaz_studenata/IT Na ovaj nain mogu se dohvatiti samo studenti tom smera, jer
postoji definisan parametar metoda U sluaju rutiranja, ovo je potrebno definisati
PrimerZend_Controller_Router_Route("korisnici/:smer",array("smer" => "IT","controller" => "korisnici","action" =>
"prikaz_svih_korisnika_za_unetu_oznaku_studijskog_programa"))
Podrazumevana vrednost atributa
Jo malo o rutiranju Do sada definisano rutiranje bilo je kroz fajl index.php U velikom delu kodova, ovo je realitovano na slian naina ali
kroz fajl Bootstrap.php u application/Bootstrap.php Obzirom da se ovaj deo koda eli uitati pre uitavanja strane,
mora se pisati u metodi _initRoutes
Primerpublic function _initRoutes(){
$frontController=Zend_Controller_Front::getInstance();$router=$frontController->getRouter();
$route=new Zend_Controller_Router_Route_Static('pocetna', array('controller'=>'Prvi','action'=>'index'));
$router->addRoute('pocetna',$route);}
View Prilikom kreiranja kontrolera, obzirom da framework pretpostavlja
da se neki rezultat negde mora prikazati, automatski se kreiraju tri bitna objekta: ViewRenderer Request (dohvata i obrauje sve podatke od korisnika - forma) Response
Svaki view se pie u phtml eksenziji i smeta u fajl koji ima ime metoda i snima se u
application/views/scripts/ pa u folder koji nosi ime kontrolera
Primer:C:\xampp\htdocs\zend\application\views\scripts\account\index.phtml
4
Kreiranje view-a Kao i kod kontrolera i action-a, i view se kreira kroz kod
Nakon kreiranja, automatski se kreira pomenuti phtmlfajl sa sadrajem kao na slici
Ovaj sadraj je statiki, i njega programer menja. Ovako definisano, ovom view-u se nita ne prosleuje, pa moe da da samo statiki sadraj
Sintaksa kodova za kreiranje
Prikaz korisniku
Ukoliko se view kreirana na ovakav nain, i sadraj eventualno modifikuje, kao na slici
Nije potrebna posebna komanda kojom se kontroleru ukazuje da treba nakon njegovog prozivanja da pozove svoj view
Prosleivanje sadraja view-u
U sluaju da se view-u prosleuje jedan ili vie podataka, koristi se sintaksa
$this->view->assign(index, value)
Npr.
Dohvatanje podatka iz metoda u view-u
Request object
Jedan od tri inicijalna view objekta je i Request object Primarna uloga ovog objekta je prihvatanje podataka koji su
prosleeni od strane korisnika(kroz URL adresu, formu, ...) HTML kod ove podatke struktuira i alje automatski, nakon
submit-ovanja forme Svaki od prosleenih podataka ima ime i vrednost Ime je name atribut u HTML formi, a vrednost ono to je
definisao korisnik ili programer Cilj je ove podatke od korisnika, prihvatiti i dalje obraivati U Zendu postoje definisani metodi kojima se direktno pristupa
Request objektu, i podaci struktuiraju
5
Metodi Request objekta
Primer index.php...
public function successAction(){$email = $this->_request->getParam('email');$username = $this->_request->getParam('username');$password = $this->_request->getParam('password');//Save the user into the system.}
Ili
public function successAction(){$email = $this->_request->getPost("email");$username = $this->_request->getPost("username");$password = $this->_request->getPost("password");//Save the user into the system.}public function activateAction(){$emailToActivate = $this->_request->getQuery("email");}
Zbog sogurnosti ga treba
izbegavati.
Provere Request objekta
Primer index.php...public function successAction(){if($this->_request->isPost()){
$email = $this->_request->getPost("email");$username = $this->_request->getPost("username");$password = $this->_request->getPost("password");
}else{ throw new Exception(Greka."); }}.....if($this->_request->isGet()){
$email = $this->_request->getQuery("email");}.....if($this->_request->isXmlHttpRequest()){
$email = $this->_request->getQuery("email");}
Prosleivanje prihvaenih parametara view-u
//Kontroler index.php
...public function nameAction(){//prosleivanje fiksnog stringa
$this->view->assign('ime', 'Pera');
//prosleivanje prihvaenog stringa od strane korisnika$request = $this->getRequest();$this->view->assign('email', $request->getParam('email'));$this->view->assign('smer', $request->getParam('smer'));
}
errors Prilikom inicijalizacije projekta, dobija se kontroler
ErrorController.php koji ve obrauje vei broj standardnih tipova greaka
Shodno ovom kontroleru, postoji i kreiran view, u folderu error, sa generikim tipom ispisa greaka
Pored definisanih tipova greaka i metoda kojima se dohvataju propratne greke, mogue je definisati i svoj dodatni kod
6
ErrorController
ErrorController
error.phtml
Cilj pisanja modela Smetanje biznis logike aplikacije
7
Primer Model za snimanje podataka u bazu podataka
SaveAccount.php
Veza kontrolera i modelapublic function successAction(){
if($this->_request->isPost()){$email = $this->_request->getParam("email");$username = $this->_request->getParam("username");$password = $this->_request->getParam("password");
require_once "SaveAccount.php";
$SaveAccount = new SaveAccount();$SaveAccount->saveAccount($username, $password, $email);}
else{throw new Exception("Greska.");
}}
Dr Nenad Koji
Visoka kola strukovnih studija zainformacione i komunikacione tehnologije