Zend\Expressive - höher, schneller, weiter
-
Upload
ralf-eggert -
Category
Technology
-
view
434 -
download
2
Transcript of Zend\Expressive - höher, schneller, weiter
![Page 1: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/1.jpg)
1
ZEND\EXPRESSIVE höher schneller weiter
CODE INSIDE
![Page 2: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/2.jpg)
2
RALF EGGERT
TrainerBerater
Autor
Insulaner
Speaker
Entwickler
ZF1seit 2006
ZF2seit 2012
ZF3seit 2016
GF
Travello
GmbH
www.ralfeggert.de
![Page 3: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/3.jpg)
3
1 PSR-7 / Middleware
2Middleware für Aktionen3
Zend\Expressive Überblick
Middleware für die Pipeline4Und was ist mit Tee MVC?5
![Page 4: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/4.jpg)
4
1 PSR-7 / Middleware
![Page 5: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/5.jpg)
5
WAS ISTPSR-7?
![Page 6: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/6.jpg)
6
PSR4
Autoload PSR2
CodingPSR1Coding
PSR3Logging PSR6
Caching
PSR7HTTP
PHP-FIGwww.phpfig.org
PSR11
???PSR14
???
PSR15
???
![Page 7: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/7.jpg)
7
<?phpnamespace Psr\Http\Message;
interface MessageInterface{ public function getProtocolVersion(); public function withProtocolVersion($version); public function getHeaders(); public function hasHeader($name); public function getHeader($name); public function getHeaderLine($name); public function withHeader($name, $value); public function withAddedHeader($name, $value); public function withoutHeader($name); public function getBody(); public function withBody(StreamInterface $body);}
PS
R-7
ME
SS
AG
E IN
TE
RF
AC
E
![Page 8: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/8.jpg)
8
<?phpnamespace Psr\Http\Message;
interface RequestInterface extends MessageInterface {}
interface ServerRequestInterface extends RequestInterface {}
interface ResponseInterface extends MessageInterface {}
interface StreamInterface {}
interface UploadedFileInterface {}
interface UriInterface{}
PS
R-7
WE
ITE
RE
INT
ER
FA
CE
S
![Page 9: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/9.jpg)
9
WAS ISTMIDDLEWARE?
![Page 10: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/10.jpg)
10
CLIENT WEBSERVER
HTTPREQUEST
HTTPRESPONSE
HTTP
![Page 11: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/11.jpg)
11
MIDDLEWARE
HTTP
REQUEST
HTTP
RESPONSEMIDDLEWARE
![Page 12: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/12.jpg)
12
MIDDLEWAREPIPELINE
HTTP
REQUEST
HTTP
RESPONSE MIDDLEWARE 1 MIDDLEWARE 2 MIDDLEWARE 3
![Page 13: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/13.jpg)
13
<?phpinterface LambdaMiddlewareInterface{ /** * @param RequestInterface $request * @return ResponseInterface */ public function __invoke($request);}
LA
MB
DA
M
IDD
LE
WA
RE
INT
ER
FA
CE
![Page 14: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/14.jpg)
14
<?phpinterface InjectedResponseMiddlewareInterface{ /** * @param RequestInterface $request * @param ResponseInterface $response * @return ResponseInterface */ public function __invoke($request, $response);}
INJE
CT
ED
RE
SP
ON
SE
MID
DL
EW
AR
EIN
TE
RF
AC
E
![Page 15: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/15.jpg)
15
<?phpinterface InjectedNextMiddlewareInterface{ /** * @param RequestInterface $request * @param ResponseInterface $response * @param callable $next * @return ResponseInterface */ public function __invoke( $request, $response, $next = null );}
INJE
CT
ED
NE
XT
M
IDD
LE
WA
RE
INT
ER
FA
CE
used by ZF3
![Page 16: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/16.jpg)
16
2 Zend\Expressive Überblick
![Page 17: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/17.jpg)
17
FRAMEWORK SILOS
![Page 18: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/18.jpg)
18
FRAMEWORK SILOS
![Page 19: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/19.jpg)
19
ZEND\DIACTOROS
ZEND\STRATIGILITY
ZEND\EXPRESSIVE
ZF KOMPONENTEN
PSR-7
MIDDLEWARE
MIDDLEWAREAPPLICATIONS
![Page 20: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/20.jpg)
20
ROUTER DI CONTAINER TEMPLATERENDERER
ERRORHANDLER
Aura.Router
FastRoute
Zend\Router
Weitere Router
Aura.DI
Pimpleinterop
Zend\ServiceManager
WeitereDI Container
Plates
Twig
Zend\View
WeitereTemplateEngine
Whoops
WeitererErrorHandler
ZEND\EXPRESSIVEZUTATEN
![Page 21: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/21.jpg)
21
PERFORMANCEMESSDATEN
Gemessen im April 2016 mit der Zend\Expressive Skeleton 1.0.1
AD = Aura.DI, AR = Aura.Router, FR = FastRoute, ZR = Zend\Router, ZS = Zend\ServiceManager, ZV = Zend\View
Laufzeit (ms) 31,8 106,5 43,8 31,9 103,8 44,9 42,7 117,2 56,1 35,6 31,3
Router FR FR FR AR AR AR ZR ZR ZR FR FR
DI Container ZS ZS ZS ZS ZS ZS ZS ZS ZS AD Pimple
Renderer Plates Twig ZV Plates Twig ZV Plates Twig ZV Plates Plates
![Page 22: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/22.jpg)
22
PERFORMANCEERKENNTNISSE
AD = Aura.DI, AR = Aura.Router, FR = FastRoute, ZR = Zend\Router, ZS = Zend\ServiceManager, ZV = Zend\View
AR FRZR
ROUTER
Plates
Twig
ZV
RENDERER
AD Pimple ZS
DI CONTAINER
![Page 23: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/23.jpg)
23
PERFORMANCEFAZIT
AD = Aura.DI, AR = Aura.Router, FR = FastRoute, ZR = Zend\Router, ZS = Zend\ServiceManager, ZV = Zend\View
FR
SCHNELLSTEVARIANTE
PlatesPimple
PS: Traue keiner Statistik, die du nicht selber gefälscht hast! ;)
ZR
REINE ZFVARIANTE
ZVZS
![Page 24: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/24.jpg)
24
INSTALLATION$ composer create-project ⏎ zendframework/zend-expressive-skeleton ⏎ /var/www/zend-expressive-skeleton$ cd /var/www/zend-expressive-skeleton$ composer serve
![Page 25: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/25.jpg)
25
ZE
ND
\ EX
PR
ES
SIV
ESK
EL
ET
ON
AP
PL
ICA
TIO
N
![Page 26: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/26.jpg)
26
VERZEICHNISSTRUKTUR config autoload data cache public src Application Action templates application error layout test ApplicationTest Action vendor composer.json
config autoload data cache modules Application config src Action templates application error layout test Action public vendor composer.json
MO
DU
LA
R
EIN
FA
CH
![Page 27: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/27.jpg)
27
CO
NF
I GM
AN
AG
ER
$ composer require mtymek/expressive-config-manager
<?php// Datei /config/config.php
use Zend\Expressive\ConfigManager\ConfigManager;use Zend\Expressive\ConfigManager\PhpFileProvider;
$configManager = new ConfigManager([ Application\ConfigProvider::class, new PhpFileProvider( 'config/autoload/{{,*.}global,{,*.}local}.php' ),]);
return new ArrayObject( $configManager->getMergedConfig());
![Page 28: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/28.jpg)
28
CO
NF
I GP
RO
VID
ER
<?php// Datei /modules/Application/src/ConfigProvider.php
namespace Application;
use Zend\Config\Factory;
class ConfigProvider{ public function __invoke() { return Factory::fromFile( __DIR__ . '/../config/module.config.php' ); }}
![Page 29: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/29.jpg)
29
CO
MP
ON
EN
TIN
ST
AL
LE
R$ composer require ⏎ zendframework/zend-component-installer$ composer require zendframework/zend-db
<?php// Datei /config/config.php
use Zend\Expressive\ConfigManager\ConfigManager;use Zend\Expressive\ConfigManager\PhpFileProvider;
$configManager = new ConfigManager([ Zend\Db\ConfigProvider::class, Application\ConfigProvider::class, new PhpFileProvider( 'config/autoload/{{,*.}global,{,*.}local}.php' ),]);
return new ArrayObject( $configManager->getMergedConfig());
![Page 30: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/30.jpg)
30
Middleware für Aktionen3
![Page 31: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/31.jpg)
31
AKTIONEN BEISPIELE
![Page 32: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/32.jpg)
32
TEMPLATE
BAUSTEINE AKTION
ROUTING
MIDDLEWARE
KONFIGURATION
![Page 33: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/33.jpg)
33MID
DL
EW
AR
Enamespace Pizza\Action;
use Application\Template\TemplateRendererInterface;use Pizza\Model\Repository\PizzaRepositoryInterface;
class ShowIntroAction{ /* ... */
public function __invoke( ServerRequestInterface $request, ResponseInterface $response, callable $next = null ) { $pizzas = $this->pizzaRepository->getPizzas();
return new HtmlResponse( $this->renderer->render( 'pizza::intro', ['pizzas' => $pizzas] ) ); }}
![Page 34: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/34.jpg)
34ZE
ND
\VI E
WT
EM
PL
AT
E<?php foreach ($this->pizzas as $pizza) : ?> <?php $urlShow = $this->url( 'pizza-show', ['id' => $pizza['id']] ); ?> <div class="col-md-4"> <div class="thumbnail text-center"> <a href="<?= $urlShow; ?>"> <img src="<?= $pizza['image'] ?>" title="<?= $pizza['name'] ?>"> </a> </div> </div><?php endforeach ?>
![Page 35: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/35.jpg)
35
return [ 'routes' => [ [ 'name' => 'pizza-intro', 'path' => '/pizza', 'middleware' => Pizza\Action\ShowIntroAction::class, 'allowed_methods' => ['GET'], ], [ 'name' => 'pizza-handle-delete', 'path' => '/pizza/delete/:id', 'middleware' => Pizza\Action\DeletePizzaAction::class, 'allowed_methods' => ['POST'], 'options' => [ 'constraints' => [ 'id' => '[1-9][0-9]*', ], ], ], ],];
ZE
ND
\ RO
UT
ER
RO
UT
ING
![Page 36: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/36.jpg)
36
namespace PizzaRest\Action;
class GetIdAction{ use PizzaRepositoryAwareTrait;
public function __invoke( ServerRequestInterface $request, ResponseInterface $response, callable $next = null ) { $pizza = $this->pizzaRepository->getSinglePizza( $request->getAttribute('id') );
if (!$pizza) { return new JsonResponse( ['err' => 'Not found'] ); } return new JsonResponse($pizza); }}
RE
ST
AK
TIO
N
![Page 37: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/37.jpg)
37
Middleware für die Pipeline4
![Page 38: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/38.jpg)
38
HTTP
REQUEST
HTTP
RESPONSE
ROUTING
MIDDLEWARE
URL HELPER
MIDDLEWARE
DISPATCHING
MIDDLEWARE
ZEND\EXPRESSIVEMW PIPELINE
![Page 39: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/39.jpg)
39
HTTP
REQUEST
HTTP
RESPONSE
LOCALIZATION
MIDDLEWARE
AUTHENTICATION
MIDDLEWARE
AUTHORIZATION
MIDDLEWARE
KOMPLEXEREMW PIPELINE
![Page 40: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/40.jpg)
40
use Zend\Expressive\Container\ApplicationFactory;use Zend\Expressive\Helper;return [ 'middleware_pipeline' => [ 'always' => [ 'middleware' => [ Helper\ServerUrlMiddleware::class, ], 'priority' => 10000, ], 'routing' => [ 'middleware' => [ ApplicationFactory::ROUTING_MIDDLEWARE, Helper\UrlHelperMiddleware::class, ApplicationFactory::DISPATCH_MIDDLEWARE, ], 'priority' => 1, ], 'error' => [ 'middleware' => [], 'error' => true, 'priority' => -10000, ], ],];
DE
FA
UL
TK
ON
FIG
UR
AT
ION
![Page 41: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/41.jpg)
41
use I18n\Middleware\LocalizationMiddleware;use User\Authorization\AuthenticationMiddleware;use User\Authorization\AuthorizationMiddleware;use Zend\Expressive\Container\ApplicationFactory;use Zend\Expressive\Helper;
return [ 'middleware_pipeline' => [ 'always' => [ /* ... */ ], 'routing' => [ 'middleware' => [ ApplicationFactory::ROUTING_MIDDLEWARE, Helper\UrlHelperMiddleware::class, LocalizationMiddleware::class, AuthenticationMiddleware::class, AuthorizationMiddleware::class, ApplicationFactory::DISPATCH_MIDDLEWARE, ], 'priority' => 1, ], 'error' => [ /* ... */ ], ],];
KO
MP
LE
XE
RE
KO
NF
IGU
RA
TIO
N
![Page 42: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/42.jpg)
42
namespace User\Authorization;
class AuthorizationMiddleware{ public function __invoke( ServerRequestInterface $request, ResponseInterface $response, callable $next ) { $permission = $result->getMatchedRouteName();
if (!$this->rbac->isGranted($this->role, $permission)) { if ($this->role == GuestRole::NAME) { throw new RuntimeException( 'Nicht angemeldet', 401 ); } else { throw new RuntimeException('Kein Zugriff', 403); } } return $next($request, $response); }}
AU
TH
OR
IZA
TIO
N
MI D
DL
EW
AR
E
![Page 43: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/43.jpg)
43AU
TH
OR
IZA
TIO
NF
EH
LG
ES
CH
LA
GE
N
![Page 44: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/44.jpg)
44
Und was ist mit Tee MVC?5
![Page 45: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/45.jpg)
45
WARUMNOCH MVC,
WENN WIR NUN MIDDLEWARE
HABEN?
![Page 46: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/46.jpg)
MVCMW Neues
Konzept
WenigeModule
MiddlewarePipeline
SchwerereIntegration
unerfahreneEntwickler
NeueProjekte
Migrationkomplexer
sehrperformant
erprobt& stabil
vieleModule
Migrationeinfach
LeichteIntegration
erfahreneEntwickler
EventManager
Bestandsprojekte
wenigerperformant
Zukunft Gegenwart
![Page 47: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/47.jpg)
47
TUTORIAL
https://github.com/RalfEggert/zendexpressivetutorial
![Page 48: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/48.jpg)
48
ACHTUNG! WERBUNG!
www.zendframeworkbuch.de
![Page 49: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/49.jpg)
49
DANKE!FRAGEN?
![Page 50: Zend\Expressive - höher, schneller, weiter](https://reader034.fdocuments.net/reader034/viewer/2022042706/5874f7cc1a28ab917a8b8447/html5/thumbnails/50.jpg)
50
1Digging In
von Zach DischnerFlickr CC BY 2.0 5
Pipesvon Leonid Mamchenkov
Flickr CC BY 2.0
17Monument valleyvon Moyan BrennFlickr CC BY 2.0
30»and... action«
von Latin SnakeFlickr CC BY 2.0
44Und was ist mit Tee?
aus der Giotto WerbungYouTube
37Pipeline
von jasonwoodhead23Flickr CC BY 2.0
4A flowery meadowvon Michael FigielFlickr CC BY 2.0
BILDNACHWEIS
49free high res texture 380
von Caleb KimbroughFlickr CC BY 2.0