Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Bundles ServiceProviders Modules ServiceProviders Modules ???

Slide 3

Slide 3 text

Framework Container HTTP

Slide 4

Slide 4 text

Framework Container HTTP

Slide 5

Slide 5 text

HttpKernelInterface

Slide 6

Slide 6 text

not about caching or functional tests

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Routing Events Controllers Bundles Services Http

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

do something before or after every request

Slide 11

Slide 11 text

different take on event listeners

Slide 12

Slide 12 text

class Foo implements HttpKernelInterface { private $app; public function __construct(HttpKernelInterface $app) { $this->app = $app; } public function handle(Request $request, ...) { $response = $this->app->handle($request, $type, $catch); return $response; } } 1 2 3

Slide 13

Slide 13 text

class Logger implements HttpKernelInterface { private $app; private $logger; public function __construct(HttpKernelInterface $app, LoggerInterface $logger) { $this->app = $app; $this->logger = $logger; } public function handle(Request $request, ...) { $response = $this->app->handle($request, $type, $catch); $this->log($request, $response); return $response; } private function log(Request $request, Response $response) { ... } }

Slide 14

Slide 14 text

$app = new CallableHttpKernel(function ($request) { return new Response('Hello World!'); });

Slide 15

Slide 15 text

$app = new Logger( $app, new Monolog\Logger() );

Slide 16

Slide 16 text

UrlMap $blog = new Silex\Application(); $blog->get('/', function () { return 'This is the blog!'; }); $app = new Stack\UrlMap($app, [ '/blog' => $blog, ]);

Slide 17

Slide 17 text

Session $app = new CallableHttpKernel(function ($request) { $session = $request->getSession(); ... }); $app = new Stack\Session($app);

Slide 18

Slide 18 text

OAuth $app = new Igorw\Stack\OAuth($app, [ 'key' => 'foo', 'secret' => 'bar', 'callback_url' => 'http://localhost:8080/auth/verify', 'success_url' => '/', 'failure_url' => '/auth', ]); $app = new Stack\Session($app);

Slide 19

Slide 19 text

OAuth $request->attributes->get('oauth.token');

Slide 20

Slide 20 text

Composition!

Slide 21

Slide 21 text

$stack = (new Stack\Builder()) ->push('Stack\Session') ->push('Igorw\Stack\OAuth', [...]) ->push('Foo'); $app = $stack->resolve($app);

Slide 22

Slide 22 text

• GeoIp • IpRestrict • Backstage • Basic Authentication • Hawk • CORS Community

Slide 23

Slide 23 text

It doesn’t stop there

Slide 24

Slide 24 text

• Authentication • Debug toolbar • Injected routes • Signed cookies • Asset management • Force SSL • Error handling

Slide 25

Slide 25 text

( )

Slide 26

Slide 26 text

Questions? • stackphp.com • #stackphp • @stackphp • @igorwesome