10.óra – CodeIgniter Framework #3
Gyimesi Ákos
[email protected] http://webprog.gy-i-m.com
Ismétlés ●
Model
●
View
●
Controller
Ismétlés ●
Model application/models/books_model.php: class Books_model extends Model { function Books_model() { parent::Model(); }
}
function getAllBooks() { return $this->db->get('books')->result(); }
●
View
●
Controller
Ismétlés ●
Model
●
View application/views/book_index.php:
= $book->title ?>
= $book->description ?>
●
Controller
Ismétlés ●
Model
●
View
●
Controller application/controllers/book.php: class Book extends Controller { function Book() { parent::Controller(); $this->load->model('Books_model'); }
}
function index() { $this->load->view('book_index', array( 'books' => $this->books_model->getAllBooks() )); }
Mi van még hátra? ●
CodeIgniter „kiterjesztések”: –
Űrlapkezelés
–
Munkamenet (session) kezelés
–
URL előállítás
–
...
Session kezelés application/controllers/book.php: class Book extends Controller { function Book() { parent::Controller(); $this->load->library('session'); }
Session modul betöltése
Olvasás a session-ből
function index() { if ($this->input->get('add_id')) { $cart = $this->session->userdata('cart'); if (!$cart) $cart = array(); $cart[] = $this->input->get('add_id');
}
}
}
$this->session->set_userdata('cart');
Írás a session-be
Session kezelés ●
CodeIgniter session vs $_SESSION –
Testreszabható ● ● ● ●
–
lejárat ideje titkosítás IP- és böngésző alapú szűrés adatbázisban tárolás
Egy hasznos funkció: $this->session->flashdata() ●
●
a megadott adat a következő kérésben kiolvasható, utána eltűnik tipikus felhasználás: redirect utáni egyszeri üzenet –
„Sikeresen megrendelted a könyvet!”
Űrlapkezelés ●
Miket tud? –
Első betöltéskor default érték beírása a mezőkbe
–
POST-olás után: ● ● ● ●
validáció: kötelező mező, email, szám, ... validáció sikerességének lekérdezése hibaüzenetek kiírása (előregyártott / beállított) POST-olt adatok visszaírása a mezőkbe (escape-elve)
Űrlapkezelés ●
Részei: –
Űrlap validáció ●
–
form_validation library
Űrlap kirajzolását segítő függvények ●
form helper
Űrlapkezelés ●
Controller: application/controllers/book.php: class Book extends Controller { function Book() { parent::Controller(); $this->load->library('form_validation'); $this->load->helper('form'); } } űrlap modulok betöltése
Űrlapkezelés ●
Controller: application/controllers/book.php: class Book extends Controller { function Book() { ... }
}
Szabálylánc: 1. Vágd le a spaceeket 2. Ellenőrizd, hogy nem üres-e 3. Ellenőrizd, hogy valid email-e
function order() { $this->form_validation->set_rules( 'name', 'Name', 'trim|required' ); $this->form_validation->set_rules( 'email', 'Email', 'trim|required|valid_email' ); if ($this->form_validation->run()) { // Valid a form } $this->load->view('book_order'); }
Űrlapkezelés ●
View: application/views/book_order.php:
URL generáló segédfüggvény
Űrlapkezelés ●
Controller –
POST-olt adatok feldolgozása: application/controllers/book.php: validáció sikerességének class Book extends Controller { lekérdezése function order() { // ... if ($this->form_validation->run()) { $postData = array( 'name' => $this->input->post('name'), 'email' => $this->input->post('email') ); // Do something with $postData } POST-olt adatok $this->load->view('book_order'); lekérdezése } }
CodeIgniter kiterjesztések ●
Tipikus „minta” a controller-ekben: –
$this->load() ⇒ lesz egy objektumváltozónk a betöltött modullal ●
●
●
$this->load->model('Books_model'); $this->books_model->getAllBooks(); $this->load->database(); $this->db->get(...) $this->load->library('session'); $this->session->set_userdata('cart', array());
CodeIgniter kiterjesztések ●
Miket lehet így betölteni? –
Model-ek ● ● ● ●
–
$this->load->model('Books_model'); betöltött file: application/models/books_model.php fájl tartalma: class Books_model extends Model hatására lesz egy $this->books_model
Adatbázis ● ●
$this->load->database() hatására lesz egy $this->db
CodeIgniter kiterjesztések ●
Miket lehet így betölteni? –
Library-k ● ● ●
●
–
$this->load->library('session'); $this->load->library('form_validation'); hatására lesz egy $this->session ill. $this->form_validation objektum, ezek metódusait használjuk Mi is írhatunk library-ket!
Helper-ek ● ● ●
●
$this->load->helper('url'); $this->load->helper('form'); hatására segédfüggvényeink lesznek: site_url(), redirect(), set_value() stb. Mi is írhatunk helper-eket!
CodeIgniter kiterjesztések ●
Beépített Library-k –
calendar
–
pagination
–
cart
–
session
–
email
–
trackback
–
encrypt
–
parser
–
upload
–
typography
–
form_validation
–
unit_test
–
ftp
–
user_agent
–
table
–
xmlrpc
–
image_lib
–
zip
CodeIgniter kiterjesztések ●
Saját library írása: application/libraries/Mylib.php: class Mylib { function addNumbers($a, $b) { return $a+$b; } } controller: $this->load->library('mylib'); $result = $this->mylib->addNumbers(1, 2);
CodeIgniter kiterjesztések ●
Meglévő library kiterjesztése application/libraries/MY_Session.php: class MY_Session { function MY_Session() { parent::Session(); } function cart() { $cart = $this->userdata('cart'); return ($cart ? $cart : array()); } } controller: $this->load->library('session'); $cart = $this->session->cart();
CodeIgniter kiterjesztések ●
Library használata library-ből: application/libraries/Mylib.php:
=&: PHP4 objektumok = hatására másolódnak, (PHP5 objektumok: referencia másolódik)
class Mylib { function Mylib() { $this->CI =& get_instance(); $this->CI->load->library('session'); }
function getLastValue() { return $this->CI->session->userdata('mylib_value'); }
}
function setValue($value) { return $this->CI->session ->set_userdata('mylib_value', $value); }
Űrlapkezelés ●
Részei: –
Űrlap validáció ●
–
Űrlap kirajzolását segítő függvények ●
●
form_validation library form helper
Miket tud? –
Első betöltéskor default érték beírása a mezőkbe
–
POST-olás után: ● ● ●
validáció, sikeresség lekérdezése hibaüzenetek kiírása POST-olt adatok visszaírása a mezőkbe (escape-elve)
CodeIgniter kiterjesztések ●
Beépített Helper-ek
–
inflector
–
array
–
language
–
compatibility
–
number
–
cookie
–
path
–
date
–
security
–
directory
–
smiley
–
download
–
string
–
email
–
text
–
file
–
typography
–
form
–
url
–
html
–
xml
CodeIgniter kiterjesztések ●
Helper-ek: –
egyszerű segédfüggvény gyűjtemények
–
betöltésük: $this->load->helper('helperName');
–
használat: controller-ben vagy view-ban
–
saját helper létrehozása: ● ●
system/application/helpers/myhelper_helper.php ki lehet terjeszteni a meglévő helper-eket (új függvények hozzáadásával): MY_url_helper.php néven
CodeIgniter kiterjesztések ●
Kiterjesztések automatikus betöltése: –
application/config.php: ● ●
$autoload['libraries'] = array(...) $autoload['helper'] = array(...)
CodeIgniter kiterjesztések ●
Egyéb kiterjesztési formák: –
Plugin-ek ● ●
●
1db osztály, 1db metódus controller-ben vagy view-ban használható (vö. library: csak controller-ben) tipikus felhasználása: alkalmazások között megosztható kód, ami controller-ben és view-ban is kell (pl. captcha)
CodeIgniter kiterjesztések ●
Egyéb kiterjesztési formák: –
Hook-ok: ● ●
oldalbetöltés lépései előtt/után végrehajtódó függvények hook típusok: – – – – – – – –
●
pre_system pre_controller post_controller_constructor post_controller display_override cache_override scaffolding_override post_system
csak ritkán kell, óvatosan használjuk!