Transcript
Page 1: 21 a Mvc i Codeigniter PDF 76273

WEB PROGRAMIRANJEPHP

MVC arhitektura i CodeIgniter

2012/2013. dr Nenad Kojić

Page 2: 21 a Mvc i Codeigniter PDF 76273

� 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.

Page 3: 21 a Mvc i Codeigniter PDF 76273

� Preuzeti poslednju veriziju sa sajta

http://ellislab.com/codeigniter

Page 4: 21 a Mvc i Codeigniter PDF 76273

� 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!!!

Page 5: 21 a Mvc i Codeigniter PDF 76273

� 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)

Page 6: 21 a Mvc i Codeigniter PDF 76273

� 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

Page 7: 21 a Mvc i Codeigniter PDF 76273

� 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

Page 8: 21 a Mvc i Codeigniter PDF 76273

� Kod Codeigniter-a

Root

index.php

http://127.0.0.1/index.php/kontakt

Application

Controllers Model View

kontakt.php

Korisnik

Page 9: 21 a Mvc i Codeigniter PDF 76273

� 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

Page 10: 21 a Mvc i Codeigniter PDF 76273
Page 11: 21 a Mvc i Codeigniter PDF 76273

� 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.

Page 12: 21 a Mvc i Codeigniter PDF 76273

� 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.

Page 13: 21 a Mvc i Codeigniter PDF 76273

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.

Page 14: 21 a Mvc i Codeigniter PDF 76273

� 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.

Page 15: 21 a Mvc i Codeigniter PDF 76273

� 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

Page 16: 21 a Mvc i Codeigniter PDF 76273

<?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.

Page 17: 21 a Mvc i Codeigniter PDF 76273

<?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

Page 18: 21 a Mvc i Codeigniter PDF 76273

<?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

Page 19: 21 a Mvc i Codeigniter PDF 76273

Bez drugog

argumenta

Page 20: 21 a Mvc i Codeigniter PDF 76273

<?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

Page 21: 21 a Mvc i Codeigniter PDF 76273

<?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

Page 22: 21 a Mvc i Codeigniter PDF 76273

<?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

Page 23: 21 a Mvc i Codeigniter PDF 76273

<?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()

Page 24: 21 a Mvc i Codeigniter PDF 76273

<?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

Page 25: 21 a Mvc i Codeigniter PDF 76273

<!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>

Page 26: 21 a Mvc i Codeigniter PDF 76273

<?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>

Page 27: 21 a Mvc i Codeigniter PDF 76273

<?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>

Page 28: 21 a Mvc i Codeigniter PDF 76273

<?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');

}

}

?>

Page 29: 21 a Mvc i Codeigniter PDF 76273

<?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);} } ?>

Page 30: 21 a Mvc i Codeigniter PDF 76273

<!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>

Page 31: 21 a Mvc i Codeigniter PDF 76273

� 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.

Page 32: 21 a Mvc i Codeigniter PDF 76273

WEB PROGRAMIRANJEPHP

MVC arhitektura i CodeIgniter

2012/2013. dr Nenad Kojić


Top Related