ipc 2015 zend framework 3 reloaded
TRANSCRIPT
![Page 1: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/1.jpg)
Zend Framework 3Zend Framework 3ReloadedReloaded
Repository: https://github.com/RalfEggert/ipc2015-zf3-reloadedRepository: https://github.com/RalfEggert/ipc2015-zf3-reloaded
1 / 61
[b01][b01]
![Page 2: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/2.jpg)
2 / 61
www.ralfeggert.dewww.ralfeggert.de
Über michÜber mich
![Page 3: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/3.jpg)
[B03][B03]
33 / / 6161
![Page 4: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/4.jpg)
[B03][B03]
44 / / 6161
![Page 5: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/5.jpg)
[B03][B03]
55 / / 6161
![Page 6: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/6.jpg)
[B03][B03]
66 / / 6161
![Page 7: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/7.jpg)
ZF1/ZF2 HistorieZF1/ZF2 Historie PHP Welt HEUTEPHP Welt HEUTE Ziele ZF3Ziele ZF3
Komponenten reloadedKomponenten reloaded Zend\ExpressiveZend\Expressive ZF3 AusblickZF3 Ausblick
7 / 61
[B06][B06][B05][B05][B04]
[B09][B09][B08][B08][B07][B07]
AgendaAgenda
![Page 8: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/8.jpg)
[B04]
88 / / 6161
ZF1 / ZF2 HistorieZF1 / ZF2 Historie
![Page 9: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/9.jpg)
[B03][B03]
99 / / 6161
![Page 10: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/10.jpg)
[B03][B03]
1010 / / 6161
![Page 11: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/11.jpg)
11 / 61
Zend Framework 1 und 2 HistorieZend Framework 1 und 2 Historie
2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016
Version 0.1(02.03.2006)
Version 1.0(30.06.2006)
Version 1.5(17.03.2008)
Version 1.6(02.09.2008)
Version 1.7(17.11.2008)
Version 1.8(30.04.2009)
Version 1.9(31.07.2009)
Version 1.10(27.01.2010)
Version 1.11(02.11.2010)
Version 1.12(27.08.2012)
Version 2.0(04.09.2012)
Version 2.1(30.01.2013)
Version 2.2(15.05.2013)
Version 2.3(12.03.2014)
Version 2.4(31.03.2015)
Version 2.5(30.06.2015)
![Page 12: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/12.jpg)
12 / 61
Zend Framework 1Zend Framework 1
Erschienen: 2006Letztes Update: 2015
Letzte Version: 1.12.16
1Download Archiv
GitHubhttps://github.com/zendframework/zf1
EngeKopplung
68Komponenten
1Repository
![Page 13: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/13.jpg)
13 / 61
Zend Framework 2Zend Framework 2Erschienen: 2012
Letztes Update: 2015Letzte Version: 2.4.8
LTS bis: 2018
1Download Archiv
GitHubhttps://github.com/zendframework/zf2
LosereKopplung
49Komponenten
1Repository
vielePackages
![Page 14: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/14.jpg)
1414 / / 6161
Zend Framework 2 Revolution→Zend Framework 2 Revolution→[B10][B10]
![Page 15: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/15.jpg)
1515 / / 6161
Migration ZF1 ZF2 desaster→ →Migration ZF1 ZF2 desaster→ →[B11][B11]
![Page 16: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/16.jpg)
[B05][B05]
1616 / / 6161
PHP Welt heutePHP Welt heute
![Page 17: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/17.jpg)
1717 / / 6161
PHP 7PHP 7[B12][B12]
![Page 18: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/18.jpg)
18 / 61
ComposerComposer
![Page 19: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/19.jpg)
19 / 61
PHP FIGPHP FIG
PSR-7PSR-4PSR-2
PSR-0
![Page 20: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/20.jpg)
2020 / / 6161
PSR-7 HTTP Message InterfacesPSR-7 HTTP Message Interfaces[B13][B13]
![Page 21: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/21.jpg)
[B06][B06]
2121 / / 6161
Ziele für Zend Framework 3Ziele für Zend Framework 3
![Page 22: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/22.jpg)
2222 / / 6161
Komponenten separierenKomponenten separieren[B14][B14]
![Page 23: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/23.jpg)
2323 / / 6161
PerformancePerformance[B15][B15]
![Page 24: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/24.jpg)
2424 / / 6161
UsabilityUsability[B16][B16]
![Page 25: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/25.jpg)
25 / 61
PSR-7 / MiddlewarePSR-7 / Middleware[B17]
![Page 26: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/26.jpg)
2626 / / 6161
MigrationMigration[B18][B18]
![Page 27: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/27.jpg)
27 / 61
{ "name": "zendframework/zendframework", "description": "Zend Framework 2", "require": { "php": ">=5.5", "zendframework/zend-authentication": "~2.5.0", "zendframework/zend-barcode": "~2.5.0", "zendframework/zend-cache": "~2.5.0", "zendframework/zend-captcha": "~2.5.0", "zendframework/zend-code": "~2.5.0", "zendframework/zend-config": "~2.5.0", "zendframework/zend-console": "~2.5.0", "zendframework/zend-crypt": "~2.5.0", "zendframework/zend-db": "~2.5.0", "zendframework/zend-debug": "~2.5.0", [...] }}
Neue Composer.json (ZF 2.5)Neue Composer.json (ZF 2.5)
![Page 28: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/28.jpg)
[B07][B07]
2828 / / 6161
Komponenten reloadedKomponenten reloaded
![Page 29: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/29.jpg)
29 / 61
Zend\ServiceManagerZend\ServiceManager
Container Interoperabilityhttps://github.com/container-interop/container-interop
Einheitliche Interface&
WiederverwendbareFactories
GitHubhttps://github.com/zendframework/zend-servicemanager
Fast vollständigRückwärtskompatibel
Performance4x schneller
Neue build() Methode
Factories perInterface oder
InvokableMigration-Guide:11 DIN A4 Seiten
Service Identifier Best Practice:class name resolution syntax
![Page 30: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/30.jpg)
30 / 61
// ArticleEntity::class mit PHP 5.5 eingeführt
return [ 'service_manager' => [ 'invokables' => [ Blog\Entity\ArticleEntity::class => Blog\Entity\ArticleEntity::class, ], 'factories' => [ Blog\Table\ArticleTable::class => Blog\Table\ArticleTableFactory::class, ], ],];
Best practice: Class Name resolutionBest practice: Class Name resolution
![Page 31: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/31.jpg)
31 / 61
return [ 'service_manager' => [ 'invokables' => [ Blog\Entity\ArticleEntity::class => Blog\Entity\ArticleEntity::class, ], ],];
$entity1 = $sm->get(Blog\Entity\ArticleEntity::class);$entity2 = $sm->get(Blog\Entity\ArticleEntity::class);
var_dump($entity1 === $entity2); // prints "true"
$entity1 = $sm->build(Blog\Entity\ArticleEntity::class);$entity2 = $sm->build(Blog\Entity\ArticleEntity::class);
var_dump($entity1 === $entity2); // prints "false"
Neue Build() MethodeNeue Build() Methode
![Page 32: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/32.jpg)
32 / 61
Zend\EventManagerZend\EventManager
BC Break I:Keine Überladung der
trigger() Methoden mehr
BC Break II:Anhängen von Listener-Aggregaten verändert
GitHubhttps://github.com/zendframework/zend-eventmanager
Performance4x bis 15x schneller
BC Break III:GlobalEventManager &
StaticEventManagerentfernt
BC Break IV:SharedEventManager
Einsatz verändert
Migration-Guide:10 DIN A4 Seiten
![Page 33: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/33.jpg)
33 / 61
// VORHER: Parameter konnten überladen werden// $event => String, Array/Traversable ODER EventInterface// $target => Callable, EventInterface ODER ein Value// $argv => Callable, EventInterface ODER ein Array // $callback => Callable ODER null
trigger($event, $target = null, $argv = [], $callback = null);triggerUntil($event, $target = null, $argv = [], $callback = null);
// NACHHER: keine Parameter Überladung mehr// $event => String// $target => Value für Target// $argv => Array mit Event Parametern
trigger($event, $target = null, $argv = []);triggerUntil($callback, $event, $target = null, $argv = []);
Geänderte Trigger() MethodenGeänderte Trigger() Methoden
![Page 34: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/34.jpg)
34 / 61
// VORHER: 3 Varianten$eventManager = new EventManager();$listenerAggregate = new MyListenerAggregate();
$eventManager->attach($listenerAggregate); // Variante 1$eventManager->attachAggregate($listenerAggregate); // Variante 2$listenerAggregate->attach($eventManager); // Variante 3
// NACHHER: 1 Variante$eventManager = new EventManager();$listenerAggregate = new MyListenerAggregate();
$listenerAggregate->attach($eventManager);
Aggregate AttachmentAggregate Attachment
![Page 35: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/35.jpg)
35 / 61
Zend\MVCZend\MVC
Änderungen von Zend\ServiceManager
übernommen
Änderungen von Zend\EventManager
übernommen
GitHubhttps://github.com/zendframework/zend-mvc
Neuer MiddlewareListener
Bleibt im Grundunverändert
Refaktorierungvoraussichtlich abgeschlossen:
Anfang Dezember 2015
Migration-Guide:2 DIN A4 Seiten
(bisher)
![Page 36: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/36.jpg)
36 / 61
Neu: Zend\DiactorosNeu: Zend\Diactoros
»Diactoros« an epithet forHermes, meaning literally,
»the messenger.«
PHP FIG(Framework Interop Group)
PSR-7(HTTP Message Interfaces)
GitHubhttps://github.com/zendframework/zend-diactoros
ServerseitigeApplikationen
HTTP Clients
![Page 37: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/37.jpg)
37 / 61
use Zend\Diactoros\Request;use Zend\Diactoros\Uri;
// Create request$request = new Request();$request->withUri(new Uri('http://website.com'));$request->withMethod('POST');$request->withAddedHeader('Authorization', 'Bearer ' . $token);$request->withAddedHeader('Content-Type', 'application/json');$request->getBody()->write(json_encode($data));
// Send request to get response$response = $client->send($request);
// Get data from response$statusCode = $response->getStatusCode();$reasonPhrase = $response->getReasonPhrase();$headers = $response->getHeaders();$body = $response->getBody();
Zend\Diactoros HTTP ClientZend\Diactoros HTTP Client
![Page 38: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/38.jpg)
38 / 61
use Zend\Diactoros\ServerRequestFactory;use Zend\Diactoros\Response;
// Create request from superglobals$request = ServerRequestFactory::fromGlobals( $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES);
// Get data from request$uploadedFiles = $request->getUploadedFiles();$queryParams = $request->getQueryParams();
// Create response and fill with data$response = new Response();$response->withHeader('Content-Type', 'application/json');$response->withAddedHeader('X-Zend-Framework', 'Diactoros');$response->getBody()->write(json_encode($data));
Zend\Diactoros Server ApplikationZend\Diactoros Server Applikation
![Page 39: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/39.jpg)
39 / 61
Neu: Zend\StratigilityNeu: Zend\Stratigility
»Stratigility« comes from»Strata«, Latin for »layer«,
and »agility«.
Applikationen auf Basis von Middleware
umsetzen
GitHubhttps://github.com/zendframework/zend-stratigility
RequestMiddleware
Response
MiddlewarePipeline
Setzt auf Zend\Diactoros auf
AuthenticationMiddleware
ErrorHandler
Middleware
![Page 40: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/40.jpg)
40 / 61
use Zend\Stratigility\MiddlewarePipe;
// Create middleware pipe$app = new MiddlewarePipe();
// Output homepage or delegate to next middleware$app->pipe('/', function ($request, $response, $next) { $path = $request->getUri()->getPath(); if (! in_array($path, ['/', ''], true)) { return $next($request, $response); } return $response->end('Homepage!');});
// Output foo page$app->pipe('/foo', function ($request, $response, $next) { return $response->end('FOO!');});
Zend\Stratigility MiddlewareZend\Stratigility Middleware
![Page 41: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/41.jpg)
41 / 61
use Zend\Stratigility\MiddlewarePipe;use Zend\Diactoros\Server;
// Create middleware pipe$app = new MiddlewarePipe();
// Create server$server = Server::createServer( $app, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES);
// Add middleware to pipe$app->pipe([...]);$app->pipe([...]);$app->pipe([...]);
// Let the server listen$server->listen();
Zend\Stratigility ServerZend\Stratigility Server
![Page 42: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/42.jpg)
[B08][B08]
4242 / / 6161
Zend\ExpressiveZend\Expressive
![Page 43: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/43.jpg)
4343 / / 6161
MiddlewareMiddleware[B19][B19]
![Page 44: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/44.jpg)
4444 / / 6161
Middleware ohne und mit PipeMiddleware ohne und mit Pipe
Client MIDDLEWARERequest Response
Client Request Response
Middleware Middleware Middleware
Client
MW PIPE Client
![Page 45: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/45.jpg)
45 / 61
Zend\ExpressiveZend\Expressive
»Begin developing PSR-7middleware applications
in minutes!«.Mikroframework
für PSR-7 MiddlewareAnwendungen
GitHubhttps://github.com/zendframework/zend-expressive
Routing:Aura.RouterFastRoute
Zend\Mvc\Router
Templating:PlatesTwig
Zend\View
Setzt auf Zend\Stratigility und Zend\Diactoros auf
Dependency InjectionContainer:
Zend\ServiceManagerPimpleAura.Di
ErrorHandling:Whoops
APIsKomplexe Websites
Single Page ApplikationenKonsolenanwendungen
![Page 46: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/46.jpg)
4646 / / 6161
Zend\Expressive Skeleton ApplicationZend\Expressive Skeleton Application
https://github.com/zendframework/zend-expressive-skeletonhttps://github.com/zendframework/zend-expressive-skeleton
![Page 47: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/47.jpg)
47 / 61
use Zend\Expressive\AppFactory;use Zend\ServiceManager\ServiceManager;
require __DIR__ . '/../vendor/autoload.php';
$container = new ServiceManager();$container->setFactory('HelloWorld', function ($container) {});$container->setFactory('Ping', function ($container) {});
$app = AppFactory::create($container);$app->get('/', 'HelloWorld');$app->get('/ping', 'Ping');$app->run();
Bootstrapping: einfachBootstrapping: einfach
![Page 48: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/48.jpg)
48 / 61
require __DIR__ . '/../vendor/autoload.php';
$container = include __DIR__ . '/../config/services.php';
$app = $container->get('Zend\Expressive\Application');$app->run();
Bootstrapping: mit KonfigurationBootstrapping: mit Konfiguration
![Page 49: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/49.jpg)
49 / 61
// Datei /config/services.phpuse Zend\Config\Factory as ConfigFactory;use Zend\ServiceManager\Config;use Zend\ServiceManager\ServiceManager;
$config = ConfigFactory::fromFiles( glob('config/autoload/{,*.}{global,local}.php', GLOB_BRACE));
$serviceManager = new ServiceManager( new Config($config['services']));$serviceManager->setService('config', $config);
return $serviceManager;
Ausgelagerte Konfiguration IAusgelagerte Konfiguration I
![Page 50: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/50.jpg)
50 / 61
// Datei /config/autoload/global.phpreturn [ 'routes' => [ [ 'path' => '/', 'middleware' => 'Application\HelloWorld', 'allowed_methods' => [ 'GET' ], ], ], 'services => [ 'invokables' => [ Application\HelloWorld::class => Application\HelloWorld::class, ], 'factories' => [ Zend\Expressive\Application::class => Zend\Expressive\Container\ApplicationFactory::class, ], ],];
Ausgelagerte Konfiguration IIAusgelagerte Konfiguration II
![Page 51: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/51.jpg)
51 / 61
// Datei /src/Application/HelloWorld.phpnamespace Application;
class HelloWorld{ public function __invoke($req, $res, $next) { $res->write('Hello, world!'); return $res; }}
HelloWorld MiddleWareHelloWorld MiddleWare
![Page 52: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/52.jpg)
[b09][b09]
5252 / / 6161
ZEND Framework 3 AusblickZEND Framework 3 Ausblick
![Page 53: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/53.jpg)
53 / 61
Zend Framework 3Zend Framework 3
Erscheint: Ende 2015 oder Anfang 2016
Kein vollständigesDownload Archiv
GitHub (voraussichtlich)https://github.com/zendframework/zf3
Sehr loseKopplung
50+Komponenten
50+Repositories
Jede Komponente besitzt eigene Tests und
Dokumentation
![Page 54: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/54.jpg)
5454 / / 6161
ZEND Framework 3 VariantenZEND Framework 3 Varianten[B20][B20]
MVCMVC ExpressiveExpressive ApigilityApigility ZF\ConsoleZF\Console
![Page 55: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/55.jpg)
[B03][B03]
5555 / / 6161
![Page 56: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/56.jpg)
[B03][B03]
5656 / / 6161
![Page 57: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/57.jpg)
Letzte Worte von MatthewLetzte Worte von Matthew
57 / 61
[b13]
Frameworks should be an implementation detail!
Frameworks should getout of the way of your code!
ZF3 is a Movement!An end to framework silos!
![Page 58: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/58.jpg)
Fragen vom Publikum?Fragen vom Publikum?5858 / / 6161
[b21][b21]
![Page 59: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/59.jpg)
WerbungWerbung
59 / 61
[b13]
Heute: 17 Uhr
www.travello.de/#jobswww.travello.de/#jobs
Ab Frühjahr 2016:
www.ralfeggert.dewww.ralfeggert.de
[b22]
![Page 60: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/60.jpg)
DankeDankeFür Ihre / Eure AufmerksamkeitFür Ihre / Eure Aufmerksamkeit
Repository: https://github.com/RalfEggert/ipc2015-zf3-reloadedRepository: https://github.com/RalfEggert/ipc2015-zf3-reloadedSlides: http://de.slideshare.net/eggertralf/ipc2015-zf3-reloadedSlides: http://de.slideshare.net/eggertralf/ipc2015-zf3-reloaded
60 / 61
[b01][b01]
![Page 61: IPC 2015 Zend Framework 3 Reloaded](https://reader036.vdocuments.site/reader036/viewer/2022081513/5870e7f31a28abcf288b61a1/html5/thumbnails/61.jpg)
BildnachweisBildnachweis
[B00] Fotos von Ralf Eggert
[B01] Matrix http://el-sobreviviente.deviantart.com/art/Matrix-98173515 von El-Sobreviviente - CC-BY http://creativecommons.org/licenses/by/3.0/
[B02] Frontiers 2011 - Day 2 https://www.flickr.com/photos/frontiersofinteraction/5866676276/ von Frontiersofinteraction - CC-BY https://creativecommons.org/licenses/by/2.0/
[B03] Imgflip Meme Generator https://imgflip.com/memegenerator/Matrix-Morpheus von imgflip.com
[B04] Horloge retour vers le futur https://commons.wikimedia.org/wiki/File:Horloge_retour_vers_le_futur.jpg von Wikimedia - https://creativecommons.org/publicdomain/zero/1.0/
[B05] Earth https://stocksnap.io/photo/DUGHLO7780 von Jay Mantri - CC0 https://creativecommons.org/publicdomain/zero/1.0/deed.de
[B06] Darts https://www.flickr.com/photos/bogdansuditu/2377844553/ von Bogdan Suditu - CC-BY https://creativecommons.org/licenses/by/2.0/
[B07] Rainbow cubes with holes https://www.flickr.com/photos/generated/6313491064/ von Jared Tarbell - CC-BY https://creativecommons.org/licenses/by/2.0/
[B08] Dutch Winter-landscape https://www.flickr.com/photos/abstract-art-fons/8956994541/ von Fons Heijnsbroek - CC-BY https://creativecommons.org/licenses/by/2.0/
[B09] Mountain View https://www.flickr.com/photos/henry_hemming/13228460095/ von Henry Hemming - CC-BY https://creativecommons.org/licenses/by/2.0/
[B10] Che Guevera https://www.flickr.com/photos/hellosputnik/2102443979/ von sputnik - CC-BY https://creativecommons.org/licenses/by/2.0/
[B11] Rubber bands https://www.flickr.com/photos/mullica/5455794041/ von Robert Brenner - CC-BY https://creativecommons.org/licenses/by/2.0/
[B12] PHP 7 Elephpant http://devzone.zend.com/6541/zendcon-php-user-groups-and-free-elephpants/ von Zend Technologies
[B13] Pocket knife collection https://www.flickr.com/photos/alexkerhead/3646629009/ von alexkerhead - CC-BY https://creativecommons.org/licenses/by/2.0/
[B14] Apothecary Cabinet https://www.flickr.com/photos/12020006@N05/8359813920/ von tootsie8664 -- CC-BY https://creativecommons.org/licenses/by/2.0/
[B15] Porsche 911 GT3RS https://www.flickr.com/photos/gfreeman23/8450589227/ von Axion23 - CC-BY https://creativecommons.org/licenses/by/2.0/
[B16] xbox-pad-for-windows-01 https://www.flickr.com/photos/futurilla/4565559935/ von Futurilla - CC-BY https://creativecommons.org/licenses/by/2.0/
[B17] Domino https://www.flickr.com/photos/barryskeates/6803420982/ von Barry Skeates - CC-BY https://creativecommons.org/licenses/by/2.0/
[B18] Guidepost https://www.flickr.com/photos/mperich/5110059854/ von Matt Perich - CC-BY https://creativecommons.org/licenses/by/2.0/
[B19]Telephone operator https://www.flickr.com/photos/kibbe_museum/5576853477/ von Kibbe Museum -- CC-BY https://creativecommons.org/licenses/by/2.0/
[B20] Jars / Gläser https://www.flickr.com/photos/manoftaste-de/9303523676/ von Christian Schnettelker / www.manoftaste.de - CC-BY https://creativecommons.org/licenses/by/2.0/
[B21] Etech05: Audience https://www.flickr.com/photos/oreilly/6648470 von James Duncan Davidson - CC-BY https://creativecommons.org/licenses/by/2.0/
[B22] Jobs https://www.flickr.com/photos/jakerust/16844967041/ von www.gotcredit.com - CC-BY https://creativecommons.org/licenses/by/2.0/
ZFrapid Logo von Moritz Liebeknecht.
Alle weiteren Screenshots und Grafiken wurden von Ralf Eggert erstellt.
61 / 61