10.óra CodeIgniter Framework #3 Gyimesi Ákos gyimesi.akos@gmail.com 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: <?php include dirname( FILE ). '/header.php');?> <?php foreach ($books as $book):?> <div class= book > <h2><?= $book->title?></h2> <p class= description ><?= $book->description?></p> </div> <?php endforeach;?> <?php include dirname( FILE ). '/footer.php');?> 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'); function index() { if ($this->input->get('add_id')) { $cart = $this->session->userdata('cart'); Session modul betöltése Olvasás a session-ből if (!$cart) $cart = array(); $cart[] = $this->input->get('add_id'); Írás a session-be $this->session->set_userdata('cart');
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 <form method= post action= <?= site_url('/book/order')?> > <?= validation_errors()?> <div class= form-field > <label for= name >Name:</label> hibák kiírása <input id= name type= text name= name value= <?= set_value('name')?> /> </div> <div class= form-field > <label for= email >Email:</label> <input id= email type= text name= name value= <?= set_value('email')?> /> </div> <div class= submit > <input type= submit value= OK /> </div> </form> post-olt érték visszaírása (escape-elve)
Űrlapkezelés Controller POST-olt adatok feldolgozása: application/controllers/book.php: class Book extends Controller { function order() { //... if ($this->form_validation->run()) { $postdata = array( 'name' => $this->input->post('name'), 'email' => $this->input->post('email') ); // Do something with $postdata $this->load->view('book_order'); validáció sikerességének lekérdezése POST-olt adatok 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 cart email encrypt upload form_validation ftp table image_lib pagination session trackback parser typography unit_test user_agent xmlrpc 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: =&: class Mylib { PHP4 objektumok = hatására másolódnak, function Mylib() { (PHP5 objektumok: referencia másolódik) $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ó form_validation library Űrlap kirajzolását segítő függvények 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 array compatibility cookie date directory download email file form html inflector language number path security smiley string text typography url 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!