Introduction to CodeIgniter
-
Upload
kaplumbaga -
Category
Documents
-
view
1.131 -
download
0
description
Transcript of Introduction to CodeIgniter
Introduction to CodeIgniterEd Finkler • http://funkatron.com • @funkatroncodeworks09
Thee Agenda
Why CodeIgniter?
The CI MVC Model
CI Basics
Running CI out of the box
Making a basic web app
Making a web api
Why CodeIgniter?http://www.flickr.com/photos/alternatewords/2332580309/
Why not CakePHP or Zend Framework or Limonade or Symfony or Solar or Kohana or Zoop or Yii or Akelos or PHP on Trax or Prado or Seagull?
Because you've gottapick one, dammit
All of them have value
That being said, CI is…Easy to understand
Simple
doesn't require advanced OOP
Doesn't force lots of conventions
Plays well with others
Quick to get up and running
Good docs and great community
Backed by invested entity (http://ellislab.com)
CodeIgniter MVC Implementation
More like"Passive View Pattern"
http://short.ie/5o7eg4
Controller
ModelView
CI application flow
Stolen from CI user guide
App components
Front controller
Routing
Security
Controller
Model
Library
Helper
Plugin
Scripts
View
Caching
Front controller
index.php
Routing
class Search extends Controller {
public function single($id) { // [...] }}
http://domain.com/index.php/controller/method/param
Security
Filtering or blocking unsafe input
ControllerThe core of everything
"Heavy": you could do everything in controller
public methods are available as actions from URL
private methods prefixed with “_”
<?phpclass Site extends Controller {
function Site() { parent::Controller(); $this->load->library('session'); } function index() { // mletters model is auto-loaded $rows = $this->mletters->getMany(10); $data['rows'] = $this->_prepData($rows); $this->load->view('index', $data); } function _prepData($rows) { // do some cleanup on the data… }?>
Model
ActiveRecord pattern available, not required
Query binding
Don't like the DB layer? Use something else
Zend_DB, Doctrine, DataMapper (http://bit.ly/datamapper), IgniteRecord (http://bit.ly/igrec) …
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";$this->db->query($sql, array(3, 'live', 'Rick'));
Library
A class designed to work on related tasks
Helper
Procedural funcs, grouped by file
Mostly for views; available in controllers
/** * Plural * * Takes a singular word and makes it plural * * @access public * @param string * @param bool * @return str */ function plural($str, $force = FALSE){ // [...]}
Plugin
Single procedural function
More extensive functionality than helper
$vals = array( 'word' => 'Random word', 'img_path' => './captcha/', 'img_url' => 'http://example.com/captcha/', 'font_path' => './system/fonts/texb.ttf', 'img_width' => '150', 'img_height' => 30, 'expiration' => 7200 );
$cap = create_captcha($vals);echo $cap['image'];
Script
Other scripts the CI app might use
ViewBuild response to clientCI Views are limitedUses plain PHP as templating lang
<?php foreach ($rows as $row): ?> <li class="letter"> <div class="body"> <h3>Dear Zend,</h3> <p><?=$row->body?></p> </div> <div class="meta"> <div class="posted"> <a href="<?=site_url('/site/single/'.$row->id)?>">Posted <?=$row->posted?></a> </div> <div class="favorite">Liked by <?=$row->favorite_count?> person(s). <a href="<?=site_url('/site/favorite/'.$row->id)?>">I like this</a> </div> </div> </li><?php endforeach ?>
View
Optional template markup
Want a heavier template lang? Use one.
<html><head><title>{blog_title}</title></head><body>
<h3>{blog_heading}</h3>
{blog_entries} <h5>{title}</h5> <p>{body}</p> {/blog_entries}</body></html>
$this->load->library('parser');$this->parser->parse('blog_template', $data);
Caching
Saves response to file
Serves up file contents if cache not expired
CI Basics
http://www.flickr.com/photos/canoafurada/395304306/
CI File Layout
index.php
system application
base classes &built-in functionality
app-specific classes& functionality
front controllerpoints to system andapplication folders
CI File Layout
default layout
CI File Layout
custom layout
only index.php is under document root
The CI Object
$this inside controllers
The loader
$this->load->{view|library|model|helper|etc}('name');
CI Out of the box
The Welcome App
Put CI on the server
Load it in the browser
Why does Welcome load?
How URLs map
Trace with Xdebug/MacGDBp
Making a web application
Population estimates DB
Get our data from Numbrary: http://short.ie/w3f6h3
Make a new controller
Change the default route
Config DB settings
Make a model
Make a view
Make fancier views
Make a web APIhttp://www.flickr.com/photos/dunechaser/2429621774/
Web API for pop. est. DB
Let users query our DB via HTTP
Return results on JSON or serialized PHP
Questions?@funkatron/#[email protected]
http://www.flickr.com/photos/deadhorse/508559841/