Introduction to CodeIgniter

36
Introduction to CodeIgniter Ed Finkler • http://funkatron.com • @funkatron codeworks09

description

Ed Finkler's slides from Codeworks 2009code : http://funkatron.com/content/codeworks09-ci-code.zip

Transcript of Introduction to CodeIgniter

Page 1: Introduction to CodeIgniter

Introduction to CodeIgniterEd Finkler • http://funkatron.com • @funkatroncodeworks09

Page 2: Introduction to CodeIgniter

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

Page 3: Introduction to CodeIgniter

Why CodeIgniter?http://www.flickr.com/photos/alternatewords/2332580309/

Page 4: Introduction to CodeIgniter

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?

Page 5: Introduction to CodeIgniter

Because you've gottapick one, dammit

Page 6: Introduction to CodeIgniter

All of them have value

Page 7: Introduction to CodeIgniter

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)

Page 8: Introduction to CodeIgniter

CodeIgniter MVC Implementation

Page 9: Introduction to CodeIgniter

More like"Passive View Pattern"

http://short.ie/5o7eg4

Controller

ModelView

Page 10: Introduction to CodeIgniter

CI application flow

Stolen from CI user guide

Page 11: Introduction to CodeIgniter

App components

Front controller

Routing

Security

Controller

Model

Library

Helper

Plugin

Scripts

View

Caching

Page 12: Introduction to CodeIgniter

Front controller

index.php

Page 13: Introduction to CodeIgniter

Routing

class Search extends Controller {

public function single($id) { // [...] }}

http://domain.com/index.php/controller/method/param

Page 14: Introduction to CodeIgniter

Security

Filtering or blocking unsafe input

Page 15: Introduction to CodeIgniter

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

Page 16: Introduction to CodeIgniter

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

Page 17: Introduction to CodeIgniter

Library

A class designed to work on related tasks

Page 18: Introduction to CodeIgniter

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){ // [...]}

Page 19: Introduction to CodeIgniter

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'];

Page 20: Introduction to CodeIgniter

Script

Other scripts the CI app might use

Page 21: Introduction to CodeIgniter

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

Page 22: Introduction to CodeIgniter

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

Page 23: Introduction to CodeIgniter

Caching

Saves response to file

Serves up file contents if cache not expired

Page 24: Introduction to CodeIgniter

CI Basics

http://www.flickr.com/photos/canoafurada/395304306/

Page 25: Introduction to CodeIgniter

CI File Layout

index.php

system application

base classes &built-in functionality

app-specific classes& functionality

front controllerpoints to system andapplication folders

Page 26: Introduction to CodeIgniter

CI File Layout

default layout

Page 27: Introduction to CodeIgniter

CI File Layout

custom layout

only index.php is under document root

Page 28: Introduction to CodeIgniter

The CI Object

$this inside controllers

Page 29: Introduction to CodeIgniter

The loader

$this->load->{view|library|model|helper|etc}('name');

Page 30: Introduction to CodeIgniter

CI Out of the box

Page 31: Introduction to CodeIgniter

The Welcome App

Put CI on the server

Load it in the browser

Why does Welcome load?

How URLs map

Trace with Xdebug/MacGDBp

Page 32: Introduction to CodeIgniter

Making a web application

Page 33: Introduction to CodeIgniter

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

Page 34: Introduction to CodeIgniter

Make a web APIhttp://www.flickr.com/photos/dunechaser/2429621774/

Page 35: Introduction to CodeIgniter

Web API for pop. est. DB

Let users query our DB via HTTP

Return results on JSON or serialized PHP