Download - 21 a Mvc i Codeigniter PDF 76273
WEB PROGRAMIRANJEPHP
MVC arhitektura i CodeIgniter
2012/2013. dr Nenad Kojić
� CI je MVC framework za PHP programski jezik
� CodeIgniter je MVC framework otvorenog koda koji se koristi za
izradu web aplikacija
� Razvijen je u cilju da se omogući brži razvoj projekata u odnosu
na programiranje od nule u čistom PHP-u.
� Ovo se postiže na taj način što se pruža bogat set klasa za
najveći broj zadataka koji se uobičajeno postavljaju u razvoju
savremenih dinamičkih sajtova.
� Cilj je da se programerima omogući da se što više fokusiraju na
kreativnost, na taj način da je potrebno što manje koda koji
treba da nešto uradi.
� Takođe je popularan zato što je to jedan od najbržih PHP
frameworka, a to je posledica toga što sam framework koristi
jako malo resursa.
� Preuzeti poslednju veriziju sa sajta
http://ellislab.com/codeigniter
� Raspakovati datoteku, i smestiti je u web server (npr. Pod
imenom CodeI)
� Nakon startovanja web servera, i ukucavanja URL adrese
127.0.0.1/CodeI, dobija se izgled kao na slici
To je to!!!
� M – Model (predstavlja biznis logiku, i zadužen za rad sa
podacima iz baze podataka i njihovu obradu )
� V – View (predstavlja podatke koji se prikazuju korisniku. To
može biti cela web strana, deo strane, RSS, ...)
� C – Controller (predstavlja vezu između Model-a i View-a.
Prepopoznaje http requeste, analizira URL adresu i komunicira sa
korisnikom)
� Ukucavanjem URL adrese od strane autora, dolazi se do faze
Routinga, koja treba da obezbedi analizu delova URL adrese
� Pre dolaska do Controllera, omogućeno je filtriranje podataka
zbog povećanja sigurnosti
� Nakon obrade od strane kontrolera, i dobijanja svih podataka od
Model-a i drugih celina, kontroler vraća tražene podatke nazad,
preko View-a, i ako je caching aktivan, deo tih podataka se
snima, da bi se sa ponovnim zahtevom to brže obradilo
� Kod standarnog PHP koda
Root
index.php
kontakt.php
proizvodi.php
Podfolder, sa dodatnim
fajlovima
http://127.0.0.1/index.php
http://127.0.0.1/proizvodi.php
� Kod Codeigniter-a
Root
index.php
http://127.0.0.1/index.php/kontakt
Application
Controllers Model View
kontakt.php
Korisnik
� http://127.0.0.1/index.php/controller/method
� http://127.0.0.1/index.php/controller/method/a/b
Ime kontroleraIme metoda unutar
kontrolera
Parametri prozvanog
metoda
� U root direktorijumu CodeIgnitera nalaze se folderi:
application, system i user_guide.
� Folder Application je predviđen da sadrži datoteke koje
korisnik treba da pravi ili ih prilagodi svojim potrebama.
� Folder system sadrži samu srž frameworka sa glavnim
klasama potrebnim za njegov rad.
� Folder user_guide sadrži uputstva za rad.
� U folderu application nalazi se folder config, koji je za
početak rada vrlo bitan.
� U config folderu podešavanja su podeljena po grupama tako
da je svaka grupa smeštena u poseban php fajl.
� U ovim fajlovima podešavanja se nalaze u asocijativnim
nizovima, čije se vrednosti posle pozivaju prilikom svakog
poziva frameworku.
autoload.php� Ovde se navode komponente koje želimo da se automatski pokreću zajedno sa sistemom. To
mogu biti: paketi, biblioteke, helperi, modeli, konfiguracioni fajlovi. Postoje određene klase zakorišćenje koje se pokreću automatski pa se ne navode ovde.
config.php� Ovde se konfigurišu osnovne opcije CI-a. Definisanje polaznog urla, index strane, charseta,
dozvoljenih url karaktera, prefiks za ekstendovane core klase, kod za enkripciju, parametrisesija, cookie-a, globalno XSS filtriranje. Jedna od interesantnih funkcija koja ovde može da se podesi je rad sa sesijama koje se čuvaju u bazi podataka, čime se postiže bolja sigurnost ipreglednost istih.
database.php� Postavljaju se podešavanja za povezivanje na bazu podataka sa kojom ce framework raditi.
Podržane su MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle, SQLite, i ODBC baze podataka.doctype.php� Definišu se html doctype koji će se koristiti.routes.php� Podešava se interno rutiranje zahteva koji stižu CodeIgniteru. Ukratko korisnik može da poziva
određenu stranu, da dobija odgovor od neke druge, a da toga nije svestan. Takođe ovde se navodi podrazumevani kontroler i strana koja će se koristiti za 404 grešku.
smileys.php� Podešavaju se parametri sličica koje će ugrađeni smily helper ispisivati.
� index.php/ nesto je strana kroz koju se framework inicijalizuje što znači da svaki poziv ka sajtu mora početi sa ovom stranom.
� Ipak je moguće skloniti ovaj sement iz URL-a i na taj način omogućiti kompaktnije linkove koji se uz to i bolje rangiraju na pretraživačima.
� Prvo u root pored index.php moramo staviti .htaccess fajl sa sledećim sadržajem:
<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /proconscale/RewriteCond %{REQUEST_URI} ̂ system.*RewriteRule ̂ (.*)$ /index.php?/$1 [L] RewriteCond %{REQUEST_URI} ̂ application.*RewriteRule ̂ (.*)$ /index.php?/$1 [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ̂ (.*)$ index.php?/$1 [L]
</IfModule><IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php</IfModule>� Na kraju u application/config/config.php za $config['index_page'] trebamo staviti vrednost prazan
string.
� Svaki od foledera za realizaciju MVC arhitekture, može imati
jedan ili više php fajlova
� Glavna koordinacije je kroz kontroler
� Svi kontroleri koji se pišu dolaze od CI_Controller
� Unutar kontrolera može biti više nezavisnih funkcija
� Svaka od njih može ali ne mora imati argumente
� Jako je bitno kako se poziva strana ili funkcionalnost u CI
� Na sličan način dobijaju se i modeli iz CI_Model
<?php
class Controller extends CI_Controller{
public function method($a, $b){
// kod metoda}
}?>
Napomena: U kontroleru su potrazumevano učitane neke klase kaošto su:
� input – služi za dohvatanje post, get ili cookie podataka.� output – omogućuje controlleru da šalje ispis bez korišćenja view-a� load – koristi se za učitavanje klasa, modela, biblioteka itd.
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function prva_1()
{
echo("Ovo je prva 1");
}
}
?> Kontroler
prva.php
Bez argumenata
Sadržaj index.php
stranice je za sada
nebitan
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function prva_1($a, $b)
{
echo("Ovo je prva_1 sa parametrima koji su prosledjeni \$a=$a i \$b=$b");
}
}
?>
prva.php
Sa argumentima
Bez drugog
argumenta
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function prva_1($a, $b=“drugi”)
{
echo("Ovo je prva_1 sa parametrima koji su prosledjeni \$a=$a i \$b=$b");
}
}
?>
prva.php
Podrazumevana
vrednost
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function prva_1($a, $b="drugi") {
echo("Ovo je prva_1 sa parametrima koji su prosledjeni \$a=$a i \$b=$b");
}
public function druga_1(){
echo("Ovo je druga bez parametara");
}
}
?>
prva.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function index() {
echo("Eeeee, ovo je prva strana!"); }
public function prva_1($a, $b="drugi"){
echo("Ovo je prva_1 sa parametrima koji su prosledjeni \$a=$a i \$b=$b"); }
public function druga_1(){
echo("Ovo je druga bez parametara"); }
}
?>
P
r
eS
a
d
a
<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function __construct() { parent::__construct();echo("Inicijalizacija! <br/>"); }
public function index() {echo("Eeeee, ovo je prva strana!"); }
public function prva_1($a, $b="drugi") {echo("Ovo je prva_1 sa parametrima koji su prosledjeni \$a=$a i \$b=$b"); }
public function druga_1() {echo("Ovo je druga bez parametara"); }
}?>
__construct()
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function index() {
echo("Eeeee, ovo je prva strana!"); }
public function proba() {
$this->load->view("proba"); }
}
?>
Kontroler
prva.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome to first page</title>
</head>
<body>
<div >
<h1>Welcome to CodeIgniter!</h1>
Text ...
</div>
</body>
</html>
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function index() {
echo("Eeeee, ovo je prva strana!"); }
public function proba() {
$this->load->view("zaglavlje");
$this->load->view("proba"); }
}
?>
zaglavlje.php
<h1> Ovo je zaglavlje </h1>
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class prva extends CI_Controller {
public function index() {
echo("Eeeee, ovo je prva strana!"); }
public function proba($a) {
$this->load->view("zaglavlje");
echo ("Promenljiva a je $a <br/>");
$x = array('cc' => $a);
$this->load->view("proba", $x);}
}
?>
proba.php
<div >
<h1>Welcome to CodeIgniter!</h1>
Ovo je parametar $cc <?php echo $cc; ?>
</div>
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class model_proba extends CI_Model
{
public function dohvati_studenta($podatak)
{
// sada se $podatak ne koristi, ali bi služio za neki upit bazi podataka
return array('smer' => 'IT', 'godina'=> 2, 'ime'=> 'Pera Peric');
}
}
?>
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');class prva extends CI_Controller {
public function index() {echo("Eeeee, ovo je prva strana!"); }
public function proba($a){$this->load->model("model_proba");$informacija = $this->model_proba->dohvati_studenta("nesto");// nesto je vraceno od modela, u ovom slucaju niz, i smesten u $informacija
echo ('Ime je: '. $informacija['ime'] ." <br/>");echo ('Godina je: '.$informacija['godina'] ." <br/>");echo ('Smer je: '.$informacija['smer'] ." <br/>");
$this->load->view("zaglavlje");echo ("Promenljiva a je $a <br/>");$x = array('cc' => $a);// dodavanje jos podataka koje se prosledjuju view-u
$x['student'] = $informacija;$this->load->view("proba", $x);} } ?>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8">
<title>Welcome to first page</title>
</head>
<body>
<div > <h1>Welcome to CodeIgniter!</h1>
Ovo je parametar $cc <?php echo $student['godina']; ?>
</div>
</body>
</html>
� Helperi su PHP falovi koji sadrže PHP funkcije. Specifični su što su dostupni globalno na nivou CodeIgniter aplikacije i što nisu napravljeni u OOP formatu. Mogu se učitavati automatski preko application/config/autoload.php ili sa $this->load->helper('ime') u kontroleru.
� URL helper služi za interakciju rad sa URL-ovima. Neke od funkcija su:
� base_url() – vraća osnovni URL sajta bez URI segmenata.� current_url() – vraća trenutni URL.� anchor(‘uri’,’naziv’,$atr) – pravi link prema URI ili URL
linku(prvi argument), drugi argument je tekst linka, trećiopcioni i sadrži niz atributa linka kao što je title itd.
� redirect(‘uri’) – redirektuje zahtev na željeni URI ili URL.
WEB PROGRAMIRANJEPHP
MVC arhitektura i CodeIgniter
2012/2013. dr Nenad Kojić