Download - Dev talk2
![Page 1: Dev talk2](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/1.jpg)
ZOOXDEVTALK #2PSR-7 E MIDDLEWARESJULHO / 2016
![Page 2: Dev talk2](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/9.jpg)
ZEND EXPRESSIVE
• Microframework voltada para PSR-7 middlewares• Recursos:• Routing• Container (container-interopt)• Templating• Error Handling• Pipelines
![Page 10: Dev talk2](https://reader036.vdocuments.us/reader036/viewer/2022083023/58a4f7e51a28abce778b4a8d/html5/thumbnails/10.jpg)
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();