SlideShare a Scribd company logo
1 of 46
Download to read offline
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/resources/detail?type=photo-gallery&slug=spout-is-live |
detail-blog.twig
}}
PAGINATION
{{
resource |
app://spout/resources/index?type=blog |
index-blog.twig |
paged(1)
}}
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

Spca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_librariesSpca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_librariesNCCOMMS
 
The Many Ways to Build Modular JavaScript
The Many Ways to Build Modular JavaScriptThe Many Ways to Build Modular JavaScript
The Many Ways to Build Modular JavaScriptTim Perry
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorialClaude Tech
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS DirectivesEyal Vardi
 
Offline Application Cache
Offline Application CacheOffline Application Cache
Offline Application CacheJonathan Stark
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgnitermirahman
 
Asynchronous Interfaces
Asynchronous InterfacesAsynchronous Interfaces
Asynchronous Interfacesmaccman
 
JavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformJavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformRobert Nyman
 
Connecting Content Silos: One CMS, Many Sites With The WordPress REST API
 Connecting Content Silos: One CMS, Many Sites With The WordPress REST API Connecting Content Silos: One CMS, Many Sites With The WordPress REST API
Connecting Content Silos: One CMS, Many Sites With The WordPress REST APICaldera Labs
 
Caldera Learn - LoopConf WP API + Angular FTW Workshop
Caldera Learn - LoopConf WP API + Angular FTW WorkshopCaldera Learn - LoopConf WP API + Angular FTW Workshop
Caldera Learn - LoopConf WP API + Angular FTW WorkshopCalderaLearn
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Elena Kolevska
 
Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsCarol McDonald
 
SproutCore is Awesome - HTML5 Summer DevFest
SproutCore is Awesome - HTML5 Summer DevFestSproutCore is Awesome - HTML5 Summer DevFest
SproutCore is Awesome - HTML5 Summer DevFesttomdale
 
PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014cagataycivici
 

What's hot (20)

REST in Peace
REST in PeaceREST in Peace
REST in Peace
 
The Rails Way
The Rails WayThe Rails Way
The Rails Way
 
Spca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_librariesSpca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_libraries
 
The Many Ways to Build Modular JavaScript
The Many Ways to Build Modular JavaScriptThe Many Ways to Build Modular JavaScript
The Many Ways to Build Modular JavaScript
 
Codegnitorppt
CodegnitorpptCodegnitorppt
Codegnitorppt
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorial
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS Directives
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
Sane Async Patterns
Sane Async PatternsSane Async Patterns
Sane Async Patterns
 
Offline Application Cache
Offline Application CacheOffline Application Cache
Offline Application Cache
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgniter
 
Asynchronous Interfaces
Asynchronous InterfacesAsynchronous Interfaces
Asynchronous Interfaces
 
JavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformJavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the Platform
 
Connecting Content Silos: One CMS, Many Sites With The WordPress REST API
 Connecting Content Silos: One CMS, Many Sites With The WordPress REST API Connecting Content Silos: One CMS, Many Sites With The WordPress REST API
Connecting Content Silos: One CMS, Many Sites With The WordPress REST API
 
Caldera Learn - LoopConf WP API + Angular FTW Workshop
Caldera Learn - LoopConf WP API + Angular FTW WorkshopCaldera Learn - LoopConf WP API + Angular FTW Workshop
Caldera Learn - LoopConf WP API + Angular FTW Workshop
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5
 
Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.js
 
SproutCore is Awesome - HTML5 Summer DevFest
SproutCore is Awesome - HTML5 Summer DevFestSproutCore is Awesome - HTML5 Summer DevFest
SproutCore is Awesome - HTML5 Summer DevFest
 
PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014PrimeTime JSF with PrimeFaces - Dec 2014
PrimeTime JSF with PrimeFaces - Dec 2014
 

Viewers also liked

My Favourite pastime
My Favourite pastimeMy Favourite pastime
My Favourite pastimesaci0003
 
Social Media kansen in 2011
Social Media kansen in 2011Social Media kansen in 2011
Social Media kansen in 2011expressivodesign
 
Cau truyen hoa hoc
Cau truyen hoa hocCau truyen hoa hoc
Cau truyen hoa hocvjt_chjen
 
Mobile learning environment ripin
Mobile learning environment   ripinMobile learning environment   ripin
Mobile learning environment ripinEdDevJoel
 
Sambahang kristiano sa Gulod
Sambahang kristiano sa GulodSambahang kristiano sa Gulod
Sambahang kristiano sa GulodSamuel Curit
 
LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011Anil Nayar
 
Pharaoh's snake at the chemist lab.
Pharaoh's snake  at the chemist lab.Pharaoh's snake  at the chemist lab.
Pharaoh's snake at the chemist lab.iesMola
 
Debbie Dogrul Associates - How We Work
Debbie Dogrul Associates - How We Work Debbie Dogrul Associates - How We Work
Debbie Dogrul Associates - How We Work ddateam
 
Alicante
AlicanteAlicante
AlicanteiesMola
 
Bai3 oxitaxitl1
Bai3 oxitaxitl1Bai3 oxitaxitl1
Bai3 oxitaxitl1vjt_chjen
 
Cmt 3321 intercom presentation 3 week 14
Cmt 3321 intercom presentation 3 week 14Cmt 3321 intercom presentation 3 week 14
Cmt 3321 intercom presentation 3 week 14amitpac7
 
world beneath the waves
world beneath the wavesworld beneath the waves
world beneath the wavestaylorlynn7
 
What cause hypothyroidism
What cause hypothyroidismWhat cause hypothyroidism
What cause hypothyroidismriquelmayer100
 

Viewers also liked (20)

My Favourite pastime
My Favourite pastimeMy Favourite pastime
My Favourite pastime
 
Html5 workshop
Html5 workshopHtml5 workshop
Html5 workshop
 
Social Media kansen in 2011
Social Media kansen in 2011Social Media kansen in 2011
Social Media kansen in 2011
 
Cau truyen hoa hoc
Cau truyen hoa hocCau truyen hoa hoc
Cau truyen hoa hoc
 
Mobile learning environment ripin
Mobile learning environment   ripinMobile learning environment   ripin
Mobile learning environment ripin
 
Trenzas
TrenzasTrenzas
Trenzas
 
nuevas tecnologias
nuevas tecnologiasnuevas tecnologias
nuevas tecnologias
 
Sambahang kristiano sa Gulod
Sambahang kristiano sa GulodSambahang kristiano sa Gulod
Sambahang kristiano sa Gulod
 
Cacsodovoco
CacsodovocoCacsodovoco
Cacsodovoco
 
LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011
 
Pharaoh's snake at the chemist lab.
Pharaoh's snake  at the chemist lab.Pharaoh's snake  at the chemist lab.
Pharaoh's snake at the chemist lab.
 
Wildflowers: Habitat for Native Pollinators on the Kerr Ranch
Wildflowers: Habitat for Native Pollinators on the Kerr Ranch Wildflowers: Habitat for Native Pollinators on the Kerr Ranch
Wildflowers: Habitat for Native Pollinators on the Kerr Ranch
 
Debbie Dogrul Associates - How We Work
Debbie Dogrul Associates - How We Work Debbie Dogrul Associates - How We Work
Debbie Dogrul Associates - How We Work
 
Alicante
AlicanteAlicante
Alicante
 
Bai3 oxitaxitl1
Bai3 oxitaxitl1Bai3 oxitaxitl1
Bai3 oxitaxitl1
 
Firearms
FirearmsFirearms
Firearms
 
Dossier prensa semana17
Dossier prensa semana17Dossier prensa semana17
Dossier prensa semana17
 
Cmt 3321 intercom presentation 3 week 14
Cmt 3321 intercom presentation 3 week 14Cmt 3321 intercom presentation 3 week 14
Cmt 3321 intercom presentation 3 week 14
 
world beneath the waves
world beneath the wavesworld beneath the waves
world beneath the waves
 
What cause hypothyroidism
What cause hypothyroidismWhat cause hypothyroidism
What cause hypothyroidism
 

Similar to Spout - Building a RESTful web app with Angular.js and BEAR.Sunday

CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkBo-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 @codelytvCodelyTV
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsMichael Peacock
 
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 platformsAyush Sharma
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenchesLukas Smith
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the TrenchesJonathan Wage
 
[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress DevelopmentAdam Tomat
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to TornadoGavin Roy
 
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 websitesLindsay Holmwood
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For BeginnersJonathan Wage
 
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 triangleAkihito Koriyama
 
Web applications with Catalyst
Web applications with CatalystWeb applications with Catalyst
Web applications with Catalystsvilen.ivanov
 
Using Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkUsing Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkDirk Haun
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5Darren Craig
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207patter
 
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 AngularJSGunnar Hillert
 

Similar to Spout - Building a RESTful web app with Angular.js and BEAR.Sunday (20)

Spout
SpoutSpout
Spout
 
Yii Introduction
Yii IntroductionYii Introduction
Yii Introduction
 
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
 
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
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenches
 
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
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
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
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
 
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
 
WCLA12 JavaScript
WCLA12 JavaScriptWCLA12 JavaScript
WCLA12 JavaScript
 
Web applications with Catalyst
Web applications with CatalystWeb applications with Catalyst
Web applications with Catalyst
 
Using Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkUsing Geeklog as a Web Application Framework
Using Geeklog as a Web Application Framework
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 
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
 

More from Richard McIntyre

More from Richard McIntyre (7)

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

Recently uploaded

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationShrmpro
 

Recently uploaded (20)

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 

Spout - Building a RESTful web app with Angular.js and BEAR.Sunday