Slim RedBeanPHP and Knockout

17
Knockout.js With Minimal PHP by Vic Metcalfe

description

Slides from the talk at http://www.meetup.com/GTA-PHP-User-Group-Toronto/events/151672182/ Source code for the demo at https://github.com/zymsys/Slim-RedBeanPHP-KnockoutJS

Transcript of Slim RedBeanPHP and Knockout

Page 1: Slim RedBeanPHP and Knockout

Knockout.jsWith Minimal PHPby Vic Metcalfe

Page 2: Slim RedBeanPHP and Knockout

Minimal Framework

Slim is 3.2MBSymfony is

50MB

Page 3: Slim RedBeanPHP and Knockout

Minimal Framework

<?php$app = new \Slim\Slim();$app->get('/hello/:name', function ($name) { echo "Hello, $name";});$app->run();

Page 4: Slim RedBeanPHP and Knockout

Minimal ORM

RedBeanPHP is 8.8MB

Doctrine is 9.2MB

325KB

Page 5: Slim RedBeanPHP and Knockout

Minimal ORM

$post = R::dispense('post');$post->text = 'Hello World';

$id = R::store($post); //Create or Update$post = R::load('post',$id); //RetrieveR::trash($post); //Delete

Page 6: Slim RedBeanPHP and Knockout

Minimal JavaScript

Knockout is 46KB

Angular is 100KB

Page 7: Slim RedBeanPHP and Knockout

Minimal JavaScript

Page 8: Slim RedBeanPHP and Knockout

SymfonyDoctrineAngular

Page 9: Slim RedBeanPHP and Knockout
Page 10: Slim RedBeanPHP and Knockout

No MVC

ModelModel ViewView ControllerController

UIDomain Logic

Shou

ld

Go Shou

ld

Go

Ends Up

Ends

Up

Page 11: Slim RedBeanPHP and Knockout

Slim: Git R’ Done

Mid

dle

ware

Mid

dle

ware

Authentication?

Caching?

Massage Input Data?

Page Generation!

Content Negotiation?

Content Negotiation?Decoratio

n?

Page 12: Slim RedBeanPHP and Knockout

Knockout: MVVM

ModelModel

ViewView

ViewModelViewModel

How your PHP represents your data

HTML with data-bind attributes

Two way binding of data and UI

Page 13: Slim RedBeanPHP and Knockout

The Demo

Page 14: Slim RedBeanPHP and Knockout

Knockout is TestableJavaScript!

• ViewModel must be a class

• Sinon is helpful for testing AJAX

Page 15: Slim RedBeanPHP and Knockout

Slim is Testable!

• Create your own App class

• Create an invoke method: public function invoke() { $this->middleware[0]->call(); $this->response()->finalize(); return $this->response(); }

Page 16: Slim RedBeanPHP and Knockout

RedBeanPHP isalmost Testable!

• Use in-memory sqlite:

public function setUp() { R::setup('sqlite::memory:'); require('seed.php'); }

public function tearDown() { R::close(); }

Page 17: Slim RedBeanPHP and Knockout

Thanks Y’All!

• Demo source available at: https://github.com/zymsys/Slim-RedBeanPHP-KnockoutJS

• I rarely tweet @v_metcalfe

• I even more rarely blog: http://blog.vicmetcalfe.com/