SlideShare a Scribd company logo
WHO NEEDS RUBY WHEN YOU’VE
     GOT CODEIGNITER?

           Jamie Rumbelow
           @jamierumbelow




     CodeIgniter Conference, London, 2012
HI, I’M JAMIE
PLUG:
codeigniterhandbook.com
SORRY CODEIGNITER,
I’VE GOT ANOTHER GIRL
BUT I STILL ♥ YOU
CODEIGNITER IS MY WIFE,
 RAILS IS MY MISTRESS
RAILS DEVELOPERS?
SMUG.
IN REALITY,
RAILS DEVS ARE RINGOS
“Totally the hot shit”
BOLLOCKS!
RUBY
NOPE!
IT’S ALL ABOUT
THE CONCEPTS
FLEXIBILITY
OTHER FRAMEWORKS
      COPY
CODEIGNITER
  ADAPTS
WHAT CONCEPTS?
CONVENTION
      >
CONFIGURATION
DON’T
 REPEAT
YOURSELF
A DAY IN THE LIFE
MVC
MVC
IT’S ALL ABOUT
   THE DATA
IT’S ALL ABOUT
*PROCESSING THE DATA
FAT
MODEL
SKINNY
CONTROLLER
MY_Model
public function get($where)
{
  return $this->db->where($where)
             ->get($this->_table);
}
PLURAL TABLE NAME
$this->_table = strtolower(plural(str_replace('_model', '', get_class())));
class User_model extends MY_Model { }
                    Text
class Post_model extends MY_Model { }
class Category_model extends MY_Model { }
OBSERVERS
class User_model extends MY_Model
{
   public $before_create = array( 'hash_password' );
}
foreach ($this->before_create as $method)
{
  $data = call_user_func_array(array($this, $method), array($data));
}
public function hash_password($user)
{
  $user['password'] = sha1($user['password']);

    return $user;
}
SCOPES
return $this;
public function confirmed()
{
  $this->db->where('confirmed', TRUE);
  return $this;
}
$this->user->confirmed()->get_all();
VALIDATION
YOU’RE
DOING
  IT
WRONG
class User_model extends MY_Model
{
   public $validate = array(
      array( 'field' => 'username', 'label' => 'Username',
          'rules' => 'required|max_length[20]|alpha_dash' ),
      array( 'field' => 'password', 'label' => 'Password',
          'rules' => 'required|min_length[8]' ),
      array( 'field' => 'email', 'label' => 'Email',
          'rules' => 'valid_email' )
   );
}
foreach ($data as $key => $value)
{
  $_POST[$key] = $value;
}
$this->form_validation->set_rules($this->validate);

return $this->form_validation->run();
MVC
PRESENTERS
<div id="account">
   <h1>
      <?= $this->bank->get($account->bank_id)->name ?> - <?= $account->title ?>
   </h1>
   <p class="information">
      <strong>Name:</strong> <?php if ($account->name): ?><?= $account->name ?><?php else: ?>N/
A<?php endif; ?><br />
      <strong>Number:</strong> <?php if ($account->number): ?><?= $account->number ?><?php
else: ?>N/A<?php endif; ?><br />
      <strong>Sort Code:</strong> <?php if ($account->sort_code): ?><?= substr($account->sort_code,
0, 2) . "-" . substr($account->sort_code, 2, 2) . "-" . substr($account->sort_code, 4, 2) ?><?php else: ?>N/
A<?php endif; ?>
   </p>
   <p class="balances">
      <strong>Total Balance:</strong> <?php if ($account->total_balance): ?><?= "&pound;" .
number_format($account->total_balance) ?><?php else: ?>N/A<?php endif; ?>
      <strong>Available Balance:</strong> <?php if ($account->available_balance): ?><?= "&pound;" .
number_format($account->available_balance) ?><?php else: ?>N/A<?php endif; ?>
   </p>
   <p class="statements">
      <?php if ($this->statements->count_by('account_id', $account->id)): ?>
          <?= anchor('/statements/' . $account->id, 'View Statements') ?>
      <?php else: ?>
          Statements Not Currently Available
      <?php endif; ?>
   </p>
</div>
<div id="account">
  <h1>
    <?= $account->title() ?>
  </h1>
  <p class="information">
    <strong>Name:</strong> <?= $account->name() ?><br />
    <strong>Number:</strong> <?= $account->number() ?><br />
    <strong>Sort Code:</strong> <?= $account->sort_code() ?>
  </p>
  <p class="balances">
    <strong>Total Balance:</strong> <?= $account->total_balance() ?>
    <strong>Available Balance:</strong> <?= $account->available_balance() ?>
  </p>
  <p class="statements">
    <?= $account->statements_link() ?>
  </p>
</div>
ENCAPSULATE
 THE CLASS
class Account_presenter
{
   public function __construct($account)
   {
     $this->account = $account;
   }
}
public function title()
{
  return get_instance()->bank->get($this->account->bank_id)->name .
       "-" . $this->account->title;
}
GETTING BETTER
public function number()
{
  return $this->account->number ?: "N/A";
}
<div id="account">
   <h1>
      <?= $this->bank->get($account->bank_id)->name ?> - <?= $account->title ?>
   </h1>
   <p class="information">
      <strong>Name:</strong> <?php if ($account->name): ?><?= $account->name ?><?php else: ?>N/
A<?php endif; ?><br />
      <strong>Number:</strong> <?php if ($account->number): ?><?= $account->number ?><?php
else: ?>N/A<?php endif; ?><br />
      <strong>Sort Code:</strong> <?php if ($account->sort_code): ?><?= substr($account->sort_code,
0, 2) . "-" . substr($account->sort_code, 2, 2) . "-" . substr($account->sort_code, 4, 2) ?><?php else: ?>N/
A<?php endif; ?>
   </p>
   <p class="balances">
      <strong>Total Balance:</strong> <?php if ($account->total_balance): ?><?= "&pound;" .
number_format($account->total_balance) ?><?php else: ?>N/A<?php endif; ?>
      <strong>Available Balance:</strong> <?php if ($account->available_balance): ?><?= "&pound;" .
number_format($account->available_balance) ?><?php else: ?>N/A<?php endif; ?>
   </p>
   <p class="statements">
      <?php if ($this->statements->count_by('account_id', $account->id)): ?>
          <?= anchor('/statements/' . $account->id, 'View Statements') ?>
      <?php else: ?>
          Statements Not Currently Available
      <?php endif; ?>
   </p>
</div>
<div id="account">
  <h1>
    <?= $account->title() ?>
  </h1>
  <p class="information">
    <strong>Name:</strong> <?= $account->name() ?><br />
    <strong>Number:</strong> <?= $account->number() ?><br />
    <strong>Sort Code:</strong> <?= $account->sort_code() ?>
  </p>
  <p class="balances">
    <strong>Total Balance:</strong> <?= $account->total_balance() ?>
    <strong>Available Balance:</strong> <?= $account->available_balance() ?>
  </p>
  <p class="statements">
    <?= $account->statements_link() ?>
  </p>
</div>
MVC
AUTOLOADING
application/views/controller/action.php
application/views/controller/action.php
application/views/controller/action.php
application/views/posts/action.php
application/views/posts/index.php
Posts::index();

application/views/posts/index.php
Posts::create();

application/views/posts/create.php
Comments::submit_spam();

application/views/comments/submit_spam.php
MY_Controller
_remap()
$view = strtolower(get_class($this)) . '/' . $method;
$view = strtolower(get_class($this)) . '/' . $method;
$view = strtolower(get_class($this)) . '/' . $method;
$this->load->view($view, $this->data);
public function index()
{
  $this->data['users'] = $this->user->get_all();
  $this->data['title'] = 'All Users';
}
HELP!
$this->load->view('shared/_header', $data);
  $this->load->view('users/all', $data);
$this->load->view('shared/_footer', $data);
$this->data['yield'] = $this->load->view($view, $this->data, TRUE);
$this->load->view('layouts/application', $this->data);
<header>
  <h1>My Application</h1>
</header>

<div id="wrapper">
  <?= $yield ?>
</div>

<footer>
  <p>Copyright &copy; 2012</p>
</footer>
THE END
Jamie Rumbelow
    @jamierumbelow
  jamieonsoftware.com



The CodeIgniter Handbook
codeigniterhandbook.com

More Related Content

What's hot

Clever Joomla! Templating Tips and Tricks
Clever Joomla! Templating Tips and TricksClever Joomla! Templating Tips and Tricks
Clever Joomla! Templating Tips and Tricks
ThemePartner
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Atwix
 
FamilySearch Reference Client
FamilySearch Reference ClientFamilySearch Reference Client
FamilySearch Reference Client
Dallan Quass
 
Keeping It Simple
Keeping It SimpleKeeping It Simple
Keeping It Simple
Stephanie Leary
 
WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3
Mizanur Rahaman Mizan
 
Jqeury ajax plugins
Jqeury ajax pluginsJqeury ajax plugins
Jqeury ajax pluginsInbal Geffen
 
Sins Against Drupal 2
Sins Against Drupal 2Sins Against Drupal 2
Sins Against Drupal 2
Aaron Crosman
 
Pagination in PHP
Pagination in PHPPagination in PHP
Pagination in PHP
Vineet Kumar Saini
 
Add edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHPAdd edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHP
Vineet Kumar Saini
 
Country State City Dropdown in PHP
Country State City Dropdown in PHPCountry State City Dropdown in PHP
Country State City Dropdown in PHP
Vineet Kumar Saini
 
Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB jhchabran
 
Drupal sins 2016 10-06
Drupal sins 2016 10-06Drupal sins 2016 10-06
Drupal sins 2016 10-06
Aaron Crosman
 
Magento Dependency Injection
Magento Dependency InjectionMagento Dependency Injection
Magento Dependency InjectionAnton Kril
 
Amp Up Your Admin
Amp Up Your AdminAmp Up Your Admin
Amp Up Your Admin
Amanda Giles
 
11. CodeIgniter vederea unei singure inregistrari
11. CodeIgniter vederea unei singure inregistrari11. CodeIgniter vederea unei singure inregistrari
11. CodeIgniter vederea unei singure inregistrari
Razvan Raducanu, PhD
 
Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
Jeroen van Dijk
 
WordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta BoxesWordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta Boxes
Jeremy Green
 
AngulrJS Overview
AngulrJS OverviewAngulrJS Overview
AngulrJS Overview
Eyal Vardi
 
Building secured wordpress themes and plugins
Building secured wordpress themes and pluginsBuilding secured wordpress themes and plugins
Building secured wordpress themes and plugins
Tikaram Bhandari
 
JQuery In Rails
JQuery In RailsJQuery In Rails
JQuery In RailsLouie Zhao
 

What's hot (20)

Clever Joomla! Templating Tips and Tricks
Clever Joomla! Templating Tips and TricksClever Joomla! Templating Tips and Tricks
Clever Joomla! Templating Tips and Tricks
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
 
FamilySearch Reference Client
FamilySearch Reference ClientFamilySearch Reference Client
FamilySearch Reference Client
 
Keeping It Simple
Keeping It SimpleKeeping It Simple
Keeping It Simple
 
WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3
 
Jqeury ajax plugins
Jqeury ajax pluginsJqeury ajax plugins
Jqeury ajax plugins
 
Sins Against Drupal 2
Sins Against Drupal 2Sins Against Drupal 2
Sins Against Drupal 2
 
Pagination in PHP
Pagination in PHPPagination in PHP
Pagination in PHP
 
Add edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHPAdd edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHP
 
Country State City Dropdown in PHP
Country State City Dropdown in PHPCountry State City Dropdown in PHP
Country State City Dropdown in PHP
 
Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB Introduction à CoffeeScript pour ParisRB
Introduction à CoffeeScript pour ParisRB
 
Drupal sins 2016 10-06
Drupal sins 2016 10-06Drupal sins 2016 10-06
Drupal sins 2016 10-06
 
Magento Dependency Injection
Magento Dependency InjectionMagento Dependency Injection
Magento Dependency Injection
 
Amp Up Your Admin
Amp Up Your AdminAmp Up Your Admin
Amp Up Your Admin
 
11. CodeIgniter vederea unei singure inregistrari
11. CodeIgniter vederea unei singure inregistrari11. CodeIgniter vederea unei singure inregistrari
11. CodeIgniter vederea unei singure inregistrari
 
Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
 
WordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta BoxesWordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta Boxes
 
AngulrJS Overview
AngulrJS OverviewAngulrJS Overview
AngulrJS Overview
 
Building secured wordpress themes and plugins
Building secured wordpress themes and pluginsBuilding secured wordpress themes and plugins
Building secured wordpress themes and plugins
 
JQuery In Rails
JQuery In RailsJQuery In Rails
JQuery In Rails
 

Viewers also liked

BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)
VogelDenise
 
Yiddish Right of REVOLUTION & Political CORRUPTION
Yiddish   Right of REVOLUTION & Political CORRUPTIONYiddish   Right of REVOLUTION & Political CORRUPTION
Yiddish Right of REVOLUTION & Political CORRUPTIONVogelDenise
 
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)
VogelDenise
 
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)
VogelDenise
 
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)
VogelDenise
 
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
VogelDenise
 
Unique Styles of Fishing
Unique Styles of FishingUnique Styles of Fishing
Unique Styles of FishingPaul Katsus
 
GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)
GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)
GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)
VogelDenise
 
03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected
03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected
03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected
VogelDenise
 
Programes de formació i inserciò (pfi)
Programes de formació i inserciò  (pfi)Programes de formació i inserciò  (pfi)
Programes de formació i inserciò (pfi)
Ferran Piñataro
 
A study to compare trajectory generation algorithms for automatic bucket fill...
A study to compare trajectory generation algorithms for automatic bucket fill...A study to compare trajectory generation algorithms for automatic bucket fill...
A study to compare trajectory generation algorithms for automatic bucket fill...
Reno Filla
 
An Event-driven Operator Model for Dynamic Simulation of Construction Machinery
An Event-driven Operator Model for Dynamic Simulation of Construction MachineryAn Event-driven Operator Model for Dynamic Simulation of Construction Machinery
An Event-driven Operator Model for Dynamic Simulation of Construction Machinery
Reno Filla
 
021013 adecco email (welsh)
021013   adecco email (welsh)021013   adecco email (welsh)
021013 adecco email (welsh)VogelDenise
 
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)
VogelDenise
 
061612 Slideshare Analytic Report Through 06/16/12
061612   Slideshare Analytic Report Through 06/16/12061612   Slideshare Analytic Report Through 06/16/12
061612 Slideshare Analytic Report Through 06/16/12VogelDenise
 
CIPR PRide Awards - Home Counties South
CIPR PRide Awards - Home Counties SouthCIPR PRide Awards - Home Counties South
CIPR PRide Awards - Home Counties South
Precise Brand Insight
 
Hatian Creole Right of REVOLUTION & Political CORRUPTION
Hatian Creole   Right of REVOLUTION & Political CORRUPTIONHatian Creole   Right of REVOLUTION & Political CORRUPTION
Hatian Creole Right of REVOLUTION & Political CORRUPTIONVogelDenise
 
062112 esperanto (supreme court)
062112   esperanto (supreme court)062112   esperanto (supreme court)
062112 esperanto (supreme court)VogelDenise
 
Persian Right of REVOLUTION & Political CORRUPTION
Persian   Right of REVOLUTION & Political CORRUPTIONPersian   Right of REVOLUTION & Political CORRUPTION
Persian Right of REVOLUTION & Political CORRUPTIONVogelDenise
 

Viewers also liked (20)

BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (GUJARATI)
 
Yiddish Right of REVOLUTION & Political CORRUPTION
Yiddish   Right of REVOLUTION & Political CORRUPTIONYiddish   Right of REVOLUTION & Political CORRUPTION
Yiddish Right of REVOLUTION & Political CORRUPTION
 
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Turkish)
 
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Tajik)
 
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)
052215 - FAX TO DELNER THOMAS & BENNIE THOMPSON (Yiddish)
 
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
 
Unique Styles of Fishing
Unique Styles of FishingUnique Styles of Fishing
Unique Styles of Fishing
 
GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)
GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)
GEORGE ZIMMERMAN & EBOLA CRISIS (Urdu)
 
03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected
03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected
03/30/15 FAX EMAIL TO BENNIE THOMPSON-Corrected
 
Programes de formació i inserciò (pfi)
Programes de formació i inserciò  (pfi)Programes de formació i inserciò  (pfi)
Programes de formació i inserciò (pfi)
 
A study to compare trajectory generation algorithms for automatic bucket fill...
A study to compare trajectory generation algorithms for automatic bucket fill...A study to compare trajectory generation algorithms for automatic bucket fill...
A study to compare trajectory generation algorithms for automatic bucket fill...
 
An Event-driven Operator Model for Dynamic Simulation of Construction Machinery
An Event-driven Operator Model for Dynamic Simulation of Construction MachineryAn Event-driven Operator Model for Dynamic Simulation of Construction Machinery
An Event-driven Operator Model for Dynamic Simulation of Construction Machinery
 
021013 adecco email (welsh)
021013   adecco email (welsh)021013   adecco email (welsh)
021013 adecco email (welsh)
 
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)
BAKER DONELSON - Attorney Layoffs The SINKING OF A TERRORIST REGIME (CORSICAN)
 
061612 Slideshare Analytic Report Through 06/16/12
061612   Slideshare Analytic Report Through 06/16/12061612   Slideshare Analytic Report Through 06/16/12
061612 Slideshare Analytic Report Through 06/16/12
 
CIPR PRide Awards - Home Counties South
CIPR PRide Awards - Home Counties SouthCIPR PRide Awards - Home Counties South
CIPR PRide Awards - Home Counties South
 
Hatian Creole Right of REVOLUTION & Political CORRUPTION
Hatian Creole   Right of REVOLUTION & Political CORRUPTIONHatian Creole   Right of REVOLUTION & Political CORRUPTION
Hatian Creole Right of REVOLUTION & Political CORRUPTION
 
062112 esperanto (supreme court)
062112   esperanto (supreme court)062112   esperanto (supreme court)
062112 esperanto (supreme court)
 
Persian Right of REVOLUTION & Political CORRUPTION
Persian   Right of REVOLUTION & Political CORRUPTIONPersian   Right of REVOLUTION & Political CORRUPTION
Persian Right of REVOLUTION & Political CORRUPTION
 
Essay Parts
Essay PartsEssay Parts
Essay Parts
 

Similar to Who Needs Ruby When You've Got CodeIgniter

Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsClinton Dreisbach
 
Dealing With Legacy PHP Applications
Dealing With Legacy PHP ApplicationsDealing With Legacy PHP Applications
Dealing With Legacy PHP Applications
Viget Labs
 
前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 session前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 session
RANK LIU
 
Smarty
SmartySmarty
Smarty
Aravind Vel
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
Marcus Ramberg
 
Developing for Business
Developing for BusinessDeveloping for Business
Developing for Business
Antonio Spinelli
 
Practical PHP by example Jan Leth-Kjaer
Practical PHP by example   Jan Leth-KjaerPractical PHP by example   Jan Leth-Kjaer
Practical PHP by example Jan Leth-Kjaer
COMMON Europe
 
TDC2016SP - Trilha Developing for Business
TDC2016SP - Trilha Developing for BusinessTDC2016SP - Trilha Developing for Business
TDC2016SP - Trilha Developing for Business
tdc-globalcode
 
You're Doing it Wrong - WordCamp Orlando
You're Doing it Wrong - WordCamp OrlandoYou're Doing it Wrong - WordCamp Orlando
You're Doing it Wrong - WordCamp Orlando
Chris Scott
 
Shangz R Brown Presentation
Shangz R Brown PresentationShangz R Brown Presentation
Shangz R Brown Presentation
shangbaby
 
Zero to SOLID
Zero to SOLIDZero to SOLID
Zero to SOLID
Vic Metcalfe
 
How to Create Login and Registration API in PHP.pdf
How to Create Login and Registration API in PHP.pdfHow to Create Login and Registration API in PHP.pdf
How to Create Login and Registration API in PHP.pdf
Appweb Coders
 
Unit testing zend framework apps
Unit testing zend framework appsUnit testing zend framework apps
Unit testing zend framework apps
Michelangelo van Dam
 
Tidy Up Your Code
Tidy Up Your CodeTidy Up Your Code
Tidy Up Your Code
Abbas Ali
 
Login and Registration form using oop in php
Login and Registration form using oop in phpLogin and Registration form using oop in php
Login and Registration form using oop in php
herat university
 
Improving state of M2 front-end - Magento 2 Community Project
Improving state of M2 front-end - Magento 2 Community ProjectImproving state of M2 front-end - Magento 2 Community Project
Improving state of M2 front-end - Magento 2 Community Project
Bartek Igielski
 
Building scalable products with WordPress - WordCamp London 2018
Building scalable products with WordPress - WordCamp London 2018Building scalable products with WordPress - WordCamp London 2018
Building scalable products with WordPress - WordCamp London 2018
Elliot Taylor
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4Developers
Kacper Gunia
 

Similar to Who Needs Ruby When You've Got CodeIgniter (20)

Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications
 
Dealing With Legacy PHP Applications
Dealing With Legacy PHP ApplicationsDealing With Legacy PHP Applications
Dealing With Legacy PHP Applications
 
前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 session前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 session
 
Smarty
SmartySmarty
Smarty
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
 
Developing for Business
Developing for BusinessDeveloping for Business
Developing for Business
 
Os Nixon
Os NixonOs Nixon
Os Nixon
 
Practical PHP by example Jan Leth-Kjaer
Practical PHP by example   Jan Leth-KjaerPractical PHP by example   Jan Leth-Kjaer
Practical PHP by example Jan Leth-Kjaer
 
TDC2016SP - Trilha Developing for Business
TDC2016SP - Trilha Developing for BusinessTDC2016SP - Trilha Developing for Business
TDC2016SP - Trilha Developing for Business
 
You're Doing it Wrong - WordCamp Orlando
You're Doing it Wrong - WordCamp OrlandoYou're Doing it Wrong - WordCamp Orlando
You're Doing it Wrong - WordCamp Orlando
 
Shangz R Brown Presentation
Shangz R Brown PresentationShangz R Brown Presentation
Shangz R Brown Presentation
 
Zero to SOLID
Zero to SOLIDZero to SOLID
Zero to SOLID
 
How to Create Login and Registration API in PHP.pdf
How to Create Login and Registration API in PHP.pdfHow to Create Login and Registration API in PHP.pdf
How to Create Login and Registration API in PHP.pdf
 
Unit testing zend framework apps
Unit testing zend framework appsUnit testing zend framework apps
Unit testing zend framework apps
 
Tidy Up Your Code
Tidy Up Your CodeTidy Up Your Code
Tidy Up Your Code
 
Login and Registration form using oop in php
Login and Registration form using oop in phpLogin and Registration form using oop in php
Login and Registration form using oop in php
 
Improving state of M2 front-end - Magento 2 Community Project
Improving state of M2 front-end - Magento 2 Community ProjectImproving state of M2 front-end - Magento 2 Community Project
Improving state of M2 front-end - Magento 2 Community Project
 
Building scalable products with WordPress - WordCamp London 2018
Building scalable products with WordPress - WordCamp London 2018Building scalable products with WordPress - WordCamp London 2018
Building scalable products with WordPress - WordCamp London 2018
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4Developers
 
Framework
FrameworkFramework
Framework
 

More from ciconf

CICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your MindCICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your Mindciconf
 
Chef + AWS + CodeIgniter
Chef + AWS + CodeIgniterChef + AWS + CodeIgniter
Chef + AWS + CodeIgniterciconf
 
Work Queues
Work QueuesWork Queues
Work Queuesciconf
 
Pretty Good Practices/Productivity
Pretty Good Practices/ProductivityPretty Good Practices/Productivity
Pretty Good Practices/Productivityciconf
 
Hosting as a Framework
Hosting as a FrameworkHosting as a Framework
Hosting as a Framework
ciconf
 
Zero to Hero in Start-ups
Zero to Hero in Start-upsZero to Hero in Start-ups
Zero to Hero in Start-ups
ciconf
 
How to use ORM
How to use ORMHow to use ORM
How to use ORM
ciconf
 

More from ciconf (7)

CICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your MindCICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your Mind
 
Chef + AWS + CodeIgniter
Chef + AWS + CodeIgniterChef + AWS + CodeIgniter
Chef + AWS + CodeIgniter
 
Work Queues
Work QueuesWork Queues
Work Queues
 
Pretty Good Practices/Productivity
Pretty Good Practices/ProductivityPretty Good Practices/Productivity
Pretty Good Practices/Productivity
 
Hosting as a Framework
Hosting as a FrameworkHosting as a Framework
Hosting as a Framework
 
Zero to Hero in Start-ups
Zero to Hero in Start-upsZero to Hero in Start-ups
Zero to Hero in Start-ups
 
How to use ORM
How to use ORMHow to use ORM
How to use ORM
 

Recently uploaded

PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
Jen Stirrup
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 

Recently uploaded (20)

PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 

Who Needs Ruby When You've Got CodeIgniter

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n