Dev talk2

10
ZOOX DEVTALK #2 PSR-7 E MIDDLEWARES JULHO / 2016

Transcript of Dev talk2

Page 1: Dev talk2

ZOOXDEVTALK #2PSR-7 E MIDDLEWARESJULHO / 2016

Page 2: Dev talk2

PSR – O QUE SIGNIFICA?

PHPStandardsRecommendations

Número

Título

1 Basic Coding Standard2 Coding Style Guide3 Logger Interface4 Autoloading Standard6 Caching Interface7 HTTP Message Interface

Page 3: Dev talk2

PSR7 – MESSAGES

• RequestPOST /path HTTP/1.1

Host: example.com

foo=bar&baz=bat

• Psr\Http\Message\RequestInterface

• ResponseHTTP/1.1 200 OK

Content-Type: text/plain

This is the response body

• Psr\Http\Message\ResponseInterface

Page 4: Dev talk2

PSR7 - HEADERS

$message = $message->withHeader('foo', 'bar');

echo $message->getHeaderLine('foo');// barecho $message->getHeaderLine('FOO');// bar

$message = $message->withHeader('fOO', 'baz');echo $message->getHeaderLine('foo');// baz

$message = $message ->withHeader('foo', 'bar') ->withAddedHeader('foo', 'baz');

$header = $message->getHeaderLine('foo');// 'bar, baz'

$header = $message->getHeader('foo');// ['bar', 'baz']

Page 5: Dev talk2

PHP MIDDLEWARES

• Um middleware recebe uma Request, uma Response e faz algo com elas.• Todo middleware DEVE retornar uma \Psr\Http\Message\

ResponseInterface• Todo middleware pode chamar o próximo da fila

Page 6: Dev talk2

MIDDLEWARE - EXEMPLO

<?php/** * Exemplo de um middleware * * @param \Psr\Http\Message\ServerRequestInterface $request PSR7 request * @param \Psr\Http\Message\ResponseInterface $response PSR7 response * @param callable $next Próximo * * @return \Psr\Http\Message\ResponseInterface */function ($request, $response, $next) { $response->getBody()->write('BEFORE'); $response = $next($request, $response); $response->getBody()->write('AFTER');

return $response;};

Page 7: Dev talk2

FLUXO COM MIDDLEWARE

$app = new MiddlewareRunner();$app->add('/contact', new ContactFormMiddleware());$app->add('/forum', new ForumMiddleware());$app->add('/blog', new BlogMiddleware());$app->add('/store', new EcommerceMiddleware());$app->run($request, $response);

$app = new MiddlewareRunner();$app->add('/zf2', new Zf2Middleware());$app->add('/symfony', new SymfonyMiddleware());$app->add('/cake', new CakeMiddleware());$app->add('/laravel', new LaravelMiddleware());$app->run($request, $response);

Page 8: Dev talk2

APLICAÇÃO COM MIDDLEWAREuse Zend\Stratigility\MiddlewarePipe;use Zend\Diactoros\Server; require __DIR__ . '/../vendor/autoload.php'; $app = new MiddlewarePipe();$server = Server::createServer($app, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES); $app->pipe('/', function ($req, $res, $next) { if (! in_array($req->getUri()->getPath(), ['/', ''], true)) { return $next($req, $res); } return $res->end('Hello world!');}); $app->pipe('/foo', function ($req, $res, $next) { return $res->end('FOO!');}); $server->listen();

Page 9: Dev talk2

ZEND EXPRESSIVE

• Microframework voltada para PSR-7 middlewares• Recursos:• Routing• Container (container-interopt)• Templating• Error Handling• Pipelines

Page 10: Dev talk2

EXPRESSIVE - EXEMPLO

<?phpuse Zend\Expressive\AppFactory;

chdir(dirname(__DIR__));require 'vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function ($request, $response, $next) { $response->getBody()->write('Hello, world!'); return $response;});

$app->pipeRoutingMiddleware();$app->pipeDispatchMiddleware();$app->run();