SlideShare a Scribd company logo
BUILDING A RESTFUL WEB APP WITH
ANGULAR.JS AND BEAR.SUNDAY
RICHARD MCINTYRE
@MACKSTAR
GOAL RESTFUL CMS
FRONT-END ANGULAR.JS
BACK-END BEAR.SUNDAY
WHY ANOTHER CMS?
▸ Building RESOURCES
▸ Power through simplicity
▸ Easy overrides with AOP
▸ Kill plugin culture
▸ Build re-usable libraries
CONTINUED...
▸ Embed in any PHP project
▸ Testable
▸ Relationships between resources / Hypermedia
▸ Templating through TWIG
BEAR.SUNDAY
▸ REST
▸ DI
▸ AOP
In most MVC application frameworks,
CRUD and OOP paradigms are mapped
to HTTP methods and resources. But the
opposite is not true. - Akihito Koriyama
EVERYTHING IS A RESOURCE
Request: /api/resources/index?_start=1
Request Method: GET
Status Code: 200 OK
{
"resources": [
{
"id": "16",
"slug": "2332",
"type": "blog",
"title": "2332",
"type_name": "Blog",
"title_label": "Title"
}
],
"_model": "resources",
"_pager": {
"maxPerPage": 5,
"current": "1",
"total": 1,
"hasNext": false,
"hasPrevious": false
},
"_links": {
"self": {
"href": "spout/app/resources/index/?_start=1"
}
}
}
Request: /api/resources/types
Request Method: POST
Status Code: 200 OK
{
"title_label": "Title",
"resource_fields": [
{
"field_type": {
"id": "1",
"name": "String",
"slug": "string"
},
"multiple": 0,
"weight": 1,
"label": "Body",
"slug": "body"
}
],
"name": "Page",
"slug": "page"
}
Request: /api/menus/links?menu=primary
Request Method: GET
Status Code: 200 OK
{
"links": [
{
"id": "6",
"name": "Link 1",
"url": "/url1",
"type": "url",
"resource": null,
"resource_type": null,
"weight": "999",
"depth": null,
"parent_id": "0",
"menu": "primary"
},
{
"id": "7",
"name": "Link 2",
"url": "/url2",
"type": "url",
"resource": null,
"resource_type": null,
"weight": "999",
"depth": null,
"parent_id": "0",
"menu": "primary"
}
],
"_model": "links"
}
namespace MackstarSpoutAdminResourceAppResources;
/**
* Resources Index
*
* @Db
*/
class Index extends ResourceObject
{
/**
* @Link(rel="type", href="app://self/resources/detail?type={slug}&slug={slug}")
* @DbPager(5)
*/
public function onGet()
{
$sql = "SELECT {$this->table}.*, type.name as type_name, type.title_label FROM {$this->table} ";
$sql .= "INNER JOIN resource_types AS type ";
$sql .= "ON type.slug = {$this->table}.type";
$stmt = $this->db->query($sql);
$this['resources'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $this;
}
CUSTOM RESOURCES CAN CALL OTHER
RESOURCES
public function onGet($id = null)
{
$this['types'] = $this->resource->get->uri('app://self/resources/types')
}
RESOURCES OF A TYPE HAVE RESOURCE AND
RESOURCE INDEX RELATIONSHIPS
OVERRIDES THROUGH AOP
▸ Validation
▸ Permissions
▸ Template Switching
▸ Other custom events
DEPENDENCIES
INJECTED
namespace MackstarSpoutAdminInterceptorUsers;
use RayAopMethodInterceptor;
use RayAopMethodInvocation;
use RayDiDiInject;
use SymfonyComponentHttpFoundationSessionSession as PhpSession;
class Session implements MethodInterceptor
{
private $session;
/**
* @Inject
*/
public function setSession(PhpSession $session)
{
$this->session = $session;
}
public function invoke(MethodInvocation $invocation)
{
$response = $invocation->proceed();
$response->body['_user'] = $this->session->get('user');
return $response;
}
BIND USING MODULES
private function installUserSessionAppender()
{
$session = $this->requestInjection('MackstarSpoutAdminInterceptorUsersSession');
$this->bindInterceptor(
$this->matcher->subclassesOf('BEARResourceResourceObject'),
$this->matcher->startsWith('onGet'),
[$session]
);
}
TESTS
namespace MackstarSpoutAdminTestInterceptorValidators;
use MackstarSpoutAdminInterceptorValidatorsUserValidator;
class UserValidatorTest extends PHPUnit_Framework_TestCase
{
public function testErrorsWhenNoEmailIsPassedIn()
{
...
}
}
FRONT-END INTEGRATION
{{ resource('app://spout/menus/links?menu=primary', 'menus.primary') }}
PAGINATION
{{ resource('app://spout/menus/links?menu=primary', 'menus.primary', page) }}
MENU
{{
resource |
app://spout/menus?slug=primary |
primary-menu.twig
}}
ARCHITECTURE
ANGULAR.JS
ADMIN
BE YOUR OWN
CONSUMER
COMPONENTS
▸ Routes
▸ Directives
▸ Controllers
▸ Services
2 WAY DATA
BINDING
TEMPLATE
<input type="email" ng-model="login.email" required>
CONTROLLER
scope.$watch('login.email', function () {
console.log("Login Email Changed To:" + scope.login.email);
});
ROUTESANGULAR-UI ROUTER
app.config(['$stateProvider', function($stateProvider) {
$stateProvider.state('login', {
url: "/login",
controller: 'LoginCtrl',
templateUrl: '/js/templates/login/index.html',
resolve: {
authentication: ['Restangular', function (Restangular) {
return Restangular.all('users/authenticate');
}]
}
})
.state('logout', {
url: "/logout",
controller: "LogoutCtrl",
resolve: {
authenticate: ['Restangular', function (Restangular) {
return Restangular.all('users/authenticate');
}]
}
});
}]);
DIRECTIVES<SP-THUMBNAIL />
app.directive('spThumbnail', function (Restangular) {
return {
restrict: 'E',
template: "<img src='/img/spinner.gif' ng-click='select()' />",
scope: { media: "=media"},
replace: true,
link: function(scope, element, attrs) {
var src = '/uploads/media/' + scope.media.directory + '/140x140_' + scope.media.file,
img = new Image();
function loadImage() {
element[0].src = src;
}
img.src = src;
img.onerror = function() {
Restangular.all('media/resize').post(
{media: scope.media, height: 140, width: 140}
).then(function() {
loadImage();
});
};
...
DEPENDENCY
INJECTION
Declare
var module = angular.module('restangular', []);
module.provider('Restangular', function() {}
Implement
var app = angular.module('myApp', ['restangular']);
app.controller('MyController', ['Restangular', function (Restangular) {
Restangular.all('users/authenticate').get().then(function(auth) {
...
});
}]);
TESTS
describe('Roles Directive', function () {
var scope,
$element;
beforeEach(function () {
module('Application');
angular.mock.inject(
function ($rootScope, $compile) {
var element = angular.element('<roles-selector></roles-selector>');
scope = $rootScope;
scope.roles = [{"id": 1, "name": "Admin"},{"id": 2, "name": "Contributor"}];
$compile(element)(scope);
scope.$digest();
$element = $(element);
}
);
});
it('should have a select menu', function () {
expect($element.prop("tagName")).toEqual('SELECT');
expect($element.find("option").length).toBe(2);
});
DEMO
STUFF TO DO
▸ Security
▸ DB/API Schema lock-down
▸ Create as composer component / Assetic
▸ More field types (locations/times/md etc)
▸ Blocks
▸ Get others input
GET INVOLVEDGITHUB.COM/MACKSTAR/SPOUT

More Related Content

What's hot

JQuery UK Service Workers Talk
JQuery UK Service Workers TalkJQuery UK Service Workers Talk
JQuery UK Service Workers Talk
Natasha Rooney
 
Authenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIsAuthenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIs
Jimmy Guerrero
 
JavaServer Pages
JavaServer Pages JavaServer Pages
JavaServer Pages
profbnk
 
What's new in Rails 4
What's new in Rails 4What's new in Rails 4
What's new in Rails 4
Fabio Akita
 
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django applicationDjangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Masashi Shibata
 
Drupal as a web framework
Drupal as a web frameworkDrupal as a web framework
Drupal as a web framework
Adam Kalsey
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it meansRobert Nyman
 
Deploying
DeployingDeploying
Deployingsoon
 
Ben Bridts - $ aws help
Ben Bridts -  $ aws helpBen Bridts -  $ aws help
Ben Bridts - $ aws help
AWSCOMSUM
 
OSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingOSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache Sling
Carsten Ziegeler
 
Learning django step 1
Learning django step 1Learning django step 1
Learning django step 1永昇 陳
 
Using RESTFUL APIs in ANGULARJS
Using RESTFUL APIs in ANGULARJSUsing RESTFUL APIs in ANGULARJS
Using RESTFUL APIs in ANGULARJS
Mindfire Solutions
 
An introduction to Laravel Passport
An introduction to Laravel PassportAn introduction to Laravel Passport
An introduction to Laravel Passport
Michael Peacock
 
Angularjs & REST
Angularjs & RESTAngularjs & REST
Angularjs & REST
Corley S.r.l.
 
PowerShell: Through the SharePoint Looking Glass
PowerShell: Through the SharePoint Looking GlassPowerShell: Through the SharePoint Looking Glass
PowerShell: Through the SharePoint Looking Glass
Brian Caauwe
 
Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…
Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…
Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…D
 
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...D
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
Richard Leland
 
iPhone Appleless Apps
iPhone Appleless AppsiPhone Appleless Apps
iPhone Appleless Apps
Remy Sharp
 
SPSSTL - PowerShell - Through the SharePoint Looking Glass
SPSSTL - PowerShell - Through the SharePoint Looking GlassSPSSTL - PowerShell - Through the SharePoint Looking Glass
SPSSTL - PowerShell - Through the SharePoint Looking Glass
Brian Caauwe
 

What's hot (20)

JQuery UK Service Workers Talk
JQuery UK Service Workers TalkJQuery UK Service Workers Talk
JQuery UK Service Workers Talk
 
Authenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIsAuthenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIs
 
JavaServer Pages
JavaServer Pages JavaServer Pages
JavaServer Pages
 
What's new in Rails 4
What's new in Rails 4What's new in Rails 4
What's new in Rails 4
 
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django applicationDjangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django application
 
Drupal as a web framework
Drupal as a web frameworkDrupal as a web framework
Drupal as a web framework
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it means
 
Deploying
DeployingDeploying
Deploying
 
Ben Bridts - $ aws help
Ben Bridts -  $ aws helpBen Bridts -  $ aws help
Ben Bridts - $ aws help
 
OSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingOSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache Sling
 
Learning django step 1
Learning django step 1Learning django step 1
Learning django step 1
 
Using RESTFUL APIs in ANGULARJS
Using RESTFUL APIs in ANGULARJSUsing RESTFUL APIs in ANGULARJS
Using RESTFUL APIs in ANGULARJS
 
An introduction to Laravel Passport
An introduction to Laravel PassportAn introduction to Laravel Passport
An introduction to Laravel Passport
 
Angularjs & REST
Angularjs & RESTAngularjs & REST
Angularjs & REST
 
PowerShell: Through the SharePoint Looking Glass
PowerShell: Through the SharePoint Looking GlassPowerShell: Through the SharePoint Looking Glass
PowerShell: Through the SharePoint Looking Glass
 
Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…
Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…
Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…
 
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
iPhone Appleless Apps
iPhone Appleless AppsiPhone Appleless Apps
iPhone Appleless Apps
 
SPSSTL - PowerShell - Through the SharePoint Looking Glass
SPSSTL - PowerShell - Through the SharePoint Looking GlassSPSSTL - PowerShell - Through the SharePoint Looking Glass
SPSSTL - PowerShell - Through the SharePoint Looking Glass
 

Viewers also liked

апкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжапкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжIrina Hahanova
 
Agenda 02th may new
Agenda 02th may newAgenda 02th may new
Agenda 02th may new
bkkhealth
 
SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...
SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...
SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...Sudhamshu Ailineni
 
Compost Trials 2013
Compost Trials 2013Compost Trials 2013
Nakaz 584 - dity z maloyu masoyu tila
Nakaz 584 - dity z maloyu masoyu tilaNakaz 584 - dity z maloyu masoyu tila
Nakaz 584 - dity z maloyu masoyu tilaIgor Nitsovych
 
Sambahang kristiano sa Gulod
Sambahang kristiano sa GulodSambahang kristiano sa Gulod
Sambahang kristiano sa Gulod
Samuel Curit
 
第二刷正誤表
第二刷正誤表第二刷正誤表
第二刷正誤表zafiro555
 
Truth & religion
Truth & religionTruth & religion
Truth & religionAAR VEE
 
Ies la mola sonia y angela
Ies la mola sonia y angelaIes la mola sonia y angela
Ies la mola sonia y angelaiesMola
 
Presentación comenius bilateral (english version)
Presentación comenius bilateral (english version)Presentación comenius bilateral (english version)
Presentación comenius bilateral (english version)iesMola
 
The little ice age
The little ice ageThe little ice age
The little ice age000175031
 
Alegacions cobertura xefe area admon
Alegacions cobertura xefe area admonAlegacions cobertura xefe area admon
Alegacions cobertura xefe area admoncomiteportos
 
Persausion PowerPoint
Persausion PowerPointPersausion PowerPoint
Persausion PowerPointkatsmith1988
 
Building Your Business in a Changing Health Care Environment - IHRSA 2014
Building Your Business in a Changing Health Care Environment - IHRSA 2014Building Your Business in a Changing Health Care Environment - IHRSA 2014
Building Your Business in a Changing Health Care Environment - IHRSA 2014
theGrapevine411
 
Microsoft word thi bd đh hoa-485
Microsoft word   thi bd đh hoa-485Microsoft word   thi bd đh hoa-485
Microsoft word thi bd đh hoa-485vjt_chjen
 

Viewers also liked (20)

апкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжапкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолж
 
Agenda 02th may new
Agenda 02th may newAgenda 02th may new
Agenda 02th may new
 
Eni gela
Eni   gelaEni   gela
Eni gela
 
SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...
SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...
SsssssssssssssssssssssssssssssssssssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...
 
Compost Trials 2013
Compost Trials 2013Compost Trials 2013
Compost Trials 2013
 
Nakaz 584 - dity z maloyu masoyu tila
Nakaz 584 - dity z maloyu masoyu tilaNakaz 584 - dity z maloyu masoyu tila
Nakaz 584 - dity z maloyu masoyu tila
 
Sambahang kristiano sa Gulod
Sambahang kristiano sa GulodSambahang kristiano sa Gulod
Sambahang kristiano sa Gulod
 
第二刷正誤表
第二刷正誤表第二刷正誤表
第二刷正誤表
 
Truth & religion
Truth & religionTruth & religion
Truth & religion
 
Ies la mola sonia y angela
Ies la mola sonia y angelaIes la mola sonia y angela
Ies la mola sonia y angela
 
Macbeth
MacbethMacbeth
Macbeth
 
Skellefea sweden-final2
Skellefea sweden-final2Skellefea sweden-final2
Skellefea sweden-final2
 
Presentación comenius bilateral (english version)
Presentación comenius bilateral (english version)Presentación comenius bilateral (english version)
Presentación comenius bilateral (english version)
 
Magic Candles
Magic CandlesMagic Candles
Magic Candles
 
Software eval
Software evalSoftware eval
Software eval
 
The little ice age
The little ice ageThe little ice age
The little ice age
 
Alegacions cobertura xefe area admon
Alegacions cobertura xefe area admonAlegacions cobertura xefe area admon
Alegacions cobertura xefe area admon
 
Persausion PowerPoint
Persausion PowerPointPersausion PowerPoint
Persausion PowerPoint
 
Building Your Business in a Changing Health Care Environment - IHRSA 2014
Building Your Business in a Changing Health Care Environment - IHRSA 2014Building Your Business in a Changing Health Care Environment - IHRSA 2014
Building Your Business in a Changing Health Care Environment - IHRSA 2014
 
Microsoft word thi bd đh hoa-485
Microsoft word   thi bd đh hoa-485Microsoft word   thi bd đh hoa-485
Microsoft word thi bd đh hoa-485
 

Similar to Spout

Yii Introduction
Yii IntroductionYii Introduction
Yii Introduction
Jason Ragsdale
 
Codegnitorppt
CodegnitorpptCodegnitorppt
Codegnitorppt
sreedath c g
 
WebGUI Developers Workshop
WebGUI Developers WorkshopWebGUI Developers Workshop
WebGUI Developers Workshop
Plain Black Corporation
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
Bo-Yi Wu
 
From framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvFrom framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytv
CodelyTV
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsMichael Peacock
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
A resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleA resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangle
Akihito Koriyama
 
Flask and Angular: An approach to build robust platforms
Flask and Angular:  An approach to build robust platformsFlask and Angular:  An approach to build robust platforms
Flask and Angular: An approach to build robust platforms
Ayush Sharma
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to TornadoGavin Roy
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenches
Lukas Smith
 
[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development
Adam Tomat
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
Gunnar Hillert
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
Jonathan Wage
 
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
James Titcumb
 
DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)Oleg Zinchenko
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the Trenches
Jonathan Wage
 
WCLA12 JavaScript
WCLA12 JavaScriptWCLA12 JavaScript
WCLA12 JavaScript
Jeffrey Zinn
 
Web applications with Catalyst
Web applications with CatalystWeb applications with Catalyst
Web applications with Catalystsvilen.ivanov
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?Remy Sharp
 

Similar to Spout (20)

Yii Introduction
Yii IntroductionYii Introduction
Yii Introduction
 
Codegnitorppt
CodegnitorpptCodegnitorppt
Codegnitorppt
 
WebGUI Developers Workshop
WebGUI Developers WorkshopWebGUI Developers Workshop
WebGUI Developers Workshop
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
From framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvFrom framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytv
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
A resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleA resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangle
 
Flask and Angular: An approach to build robust platforms
Flask and Angular:  An approach to build robust platformsFlask and Angular:  An approach to build robust platforms
Flask and Angular: An approach to build robust platforms
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenches
 
[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
 
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
 
DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the Trenches
 
WCLA12 JavaScript
WCLA12 JavaScriptWCLA12 JavaScript
WCLA12 JavaScript
 
Web applications with Catalyst
Web applications with CatalystWeb applications with Catalyst
Web applications with Catalyst
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 

More from Richard McIntyre

Why Message Driven?
Why Message Driven?Why Message Driven?
Why Message Driven?
Richard McIntyre
 
Current state-of-php
Current state-of-phpCurrent state-of-php
Current state-of-php
Richard McIntyre
 
Spout
SpoutSpout
Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?
Richard McIntyre
 
What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...
Richard McIntyre
 
Using Backbone with CakePHP
Using Backbone with CakePHPUsing Backbone with CakePHP
Using Backbone with CakePHPRichard McIntyre
 
Future of PHP
Future of PHPFuture of PHP
Future of PHP
Richard McIntyre
 

More from Richard McIntyre (8)

Why Message Driven?
Why Message Driven?Why Message Driven?
Why Message Driven?
 
Current state-of-php
Current state-of-phpCurrent state-of-php
Current state-of-php
 
Spout
SpoutSpout
Spout
 
Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?
 
What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...
 
Lithium Best
Lithium Best Lithium Best
Lithium Best
 
Using Backbone with CakePHP
Using Backbone with CakePHPUsing Backbone with CakePHP
Using Backbone with CakePHP
 
Future of PHP
Future of PHPFuture of PHP
Future of PHP
 

Spout