the mvc architecture of zf2 - zend the php company · the mvc architecture of zf2 ... mvc...
TRANSCRIPT
![Page 1: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/1.jpg)
© All rights reserved. Zend Technologies, Inc.
The MVC architecture of ZF2
by Enrico Zimuel ([email protected])
Senior Software EngineerZend Framework Core TeamZend Technologies Ltd
![Page 2: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/2.jpg)
© All rights reserved. Zend Technologies, Inc.
• Enrico Zimuel
• Software Engineer since 1996– Assembly x86, C/C++, Java, Perl, PHP
• PHP Engineer at Zend Technologies in the
Zend Framework Team
• International speaker on PHP and
computer security topics
• Researcher programmer at Informatics
Institute of University of Amsterdam
• Co-founder of PUG Torino (Italy)
About me
@ezimuel
www.zimuel.it
![Page 3: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/3.jpg)
© All rights reserved. Zend Technologies, Inc.
ZF2 in a slide
● New architecture
▶ MVC, Di, Events, Service, Module● Performance improvement (lazy loading)● Requirement: PHP 5.3.3● PSR-2 compliant● Packaging system (pyrus, composer)● ZF 2.0.3 last stable
▶ http://framework.zend.com
![Page 4: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/4.jpg)
© All rights reserved. Zend Technologies, Inc.
A new core
● The ZF1 way:
▶ Singleton, Registry, and Hard-Coded Dependencies
● The ZF2 approach:
▶ Aspect Oriented Design and Dependency Injection
![Page 5: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/5.jpg)
© All rights reserved. Zend Technologies, Inc.
Model View Controller
![Page 6: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/6.jpg)
© All rights reserved. Zend Technologies, Inc.
MVC – Model, View, Controller
![Page 7: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/7.jpg)
© All rights reserved. Zend Technologies, Inc.
MVC
The central idea behind MVC is code reusability and
separation of concerns
![Page 8: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/8.jpg)
© All rights reserved. Zend Technologies, Inc.
MVC architecture of ZF2
● Everything is an event
dispatchbootstrap route
Listeners
HTTPrequest
HTTPresponse
![Page 9: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/9.jpg)
© All rights reserved. Zend Technologies, Inc.
A common workflow
use Zend\ServiceManager\ServiceManager;use Zend\Mvc\Application;
/* … */
$services = new ServiceManager($servicesConfig);$app = new Application($appConfig, $services);$app->bootstrap();$response = $app->run();$response->send();
![Page 10: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/10.jpg)
© All rights reserved. Zend Technologies, Inc.
Default services
● Application expects a ServiceManager, configured with the following services:
▶ EventManager▶ ModuleManager▶ Request▶ Response▶ RouteListener▶ Router▶ DispatchListener▶ ViewManager
![Page 11: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/11.jpg)
© All rights reserved. Zend Technologies, Inc.
ZF2Skeleton Application
![Page 12: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/12.jpg)
© All rights reserved. Zend Technologies, Inc.
ZF2 skeleton application
● https://github.com/zendframework/ZendSkeletonApplication
● Install using composer:
▶ curl -s https://getcomposer.org/installer | php --▶ php composer.phar create-project --repository-
url="http://packages.zendframework.com" zendframework/skeleton-application path/to/install
![Page 13: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/13.jpg)
© All rights reserved. Zend Technologies, Inc.
composer.json
{ "name": "zendframework/skeleton-application", "description": "Skeleton Application for ZF2", "license": "BSD-3-Clause", "keywords": [ "framework", "zf2" ], "homepage": "http://framework.zend.com/", "require": { "php": ">=5.3.3", "zendframework/zendframework": "2.*" }}
![Page 14: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/14.jpg)
© All rights reserved. Zend Technologies, Inc.
Directory tree
config
data
module
public
vendor
![Page 15: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/15.jpg)
© All rights reserved. Zend Technologies, Inc.
Config folder
config
autoload
application.config.php
data
module
public
vendor
![Page 16: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/16.jpg)
© All rights reserved. Zend Technologies, Inc.
Data folder
config
data
cache
module
public
vendor
![Page 17: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/17.jpg)
© All rights reserved. Zend Technologies, Inc.
Module folder
moduleApplication
configmodule.config.php
srcApplication
ControllerIndexController.php
viewapplication
indexindex.phtml
errorlayout
Module.php
Name of the module
![Page 18: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/18.jpg)
© All rights reserved. Zend Technologies, Inc.
Public folder
public
images
js
css
.htaccess
index.php
![Page 19: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/19.jpg)
© All rights reserved. Zend Technologies, Inc.
Vendor folder
config
data
module
public
vendor
zendframework
![Page 20: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/20.jpg)
© All rights reserved. Zend Technologies, Inc.
configuration
![Page 21: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/21.jpg)
© All rights reserved. Zend Technologies, Inc.
/config/application.config.php
return array( 'modules' => array( 'Application', ), 'module_listener_options' => array( 'config_glob_paths' => array( 'config/autoload/{,*.}{global,local}.php', ), 'module_paths' => array( './module', './vendor', ), ),);
![Page 22: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/22.jpg)
© All rights reserved. Zend Technologies, Inc.
public folder
![Page 23: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/23.jpg)
© All rights reserved. Zend Technologies, Inc.
public/.htaccess
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} -s [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^.*$ - [NC,L]RewriteRule ^.*$ index.php [NC,L]
![Page 24: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/24.jpg)
© All rights reserved. Zend Technologies, Inc.
Front controller (public/index.php)
<?php/** * This makes our life easier when dealing with paths. Everything is relative * to the application root now. */chdir(dirname(__DIR__));
// Setup autoloadinginclude 'init_autoloader.php';
// Run the application!Zend\Mvc\Application::init(include 'config/application.config.php')->run()->send();
![Page 25: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/25.jpg)
© All rights reserved. Zend Technologies, Inc.
Zend\ServiceManager
● The ServiceManager is a Service Locator implementation
● A Service Locator is a well-known object in which you may register objects (more in general services) and later retrieve them
● Driven by configuration
![Page 26: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/26.jpg)
© All rights reserved. Zend Technologies, Inc.
Types of Services
● Explicit (name => object pairs)● Invokables (name => class to instantiate)● Factories (name => callable returning object)● Aliases (name => some other name)● Abstract Factories (unknown services)● Scoped Containers (limit what can be created)● Shared (or not; you decide)
![Page 27: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/27.jpg)
© All rights reserved. Zend Technologies, Inc.
module
![Page 28: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/28.jpg)
© All rights reserved. Zend Technologies, Inc.
A module is all related code and assets that solve a specific problem.
Modules inform the MVC about services and event listeners
Modules by default
![Page 29: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/29.jpg)
© All rights reserved. Zend Technologies, Inc.
Modules for ZF2
● The basic unit in a ZF2 applicationis a Module
● Modules are “Plug and play” technology● Modules are simple:
▶ A namespace▶ Containing a single classfile: Module.php
![Page 30: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/30.jpg)
© All rights reserved. Zend Technologies, Inc.
Develop Modules
● Modules contain all logic related to a discrete application problem.
▶ Controllers▶ Entities▶ Plugins▶ Etc.
● 99% of the time, you will write modules
![Page 31: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/31.jpg)
© All rights reserved. Zend Technologies, Inc.
\module\Application\Module.php
namespace Application;
use Zend\Mvc\ModuleRouteListener;use Zend\Mvc\MvcEvent;
class Module{ public function getConfig() { return include __DIR__ . '/config/module.config.php'; }}
![Page 32: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/32.jpg)
© All rights reserved. Zend Technologies, Inc.
/module/Application/config/module.config.php(routing part)
return array( 'router' => array( 'routes' => array( 'home' => array( 'type' => 'Zend\Mvc\Router\Http\Literal', 'options' => array( 'route' => '/', 'defaults' => array( 'controller' => 'Application\Controller\Index', 'action' => 'index', ), ), ),...
![Page 33: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/33.jpg)
© All rights reserved. Zend Technologies, Inc.
/module/Application/config/module.config.php(routing part 2)
... 'application' => array(
'type' => 'Literal', 'options' => array( 'route' => '/application', 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index', 'action' => 'index', ), ), 'may_terminate' => true, 'child_routes' => array( 'default' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:controller[/:action]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ), 'defaults' => array( ),
...
![Page 34: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/34.jpg)
© All rights reserved. Zend Technologies, Inc.
/module/Application/config/module.config.php(controller & translator part)
…'service_manager' => array( 'factories' => array( 'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', ), ), 'translator' => array( 'locale' => 'en_US', 'translation_file_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __DIR__ . '/../language', 'pattern' => '%s.mo', ), ), ), 'controllers' => array( 'invokables' => array( 'Application\Controller\Index' => 'Application\Controller\IndexController' ), ),...
![Page 35: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/35.jpg)
© All rights reserved. Zend Technologies, Inc.
/module/Application/config/module.config.php(view)
...'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => array( 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ), 'template_path_stack' => array( __DIR__ . '/../view', ), ),...
![Page 36: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/36.jpg)
© All rights reserved. Zend Technologies, Inc.
/module/Application/src/Application/Controller/IndexController.php
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController{ public function indexAction() { return new ViewModel(); }}
![Page 37: The MVC architecture of ZF2 - Zend the PHP Company · The MVC architecture of ZF2 ... MVC architecture of ZF2 ... \module\Application\Module.php namespace Application; use Zend\Mvc\ModuleRouteListener;](https://reader031.vdocuments.net/reader031/viewer/2022021721/5be4105209d3f2ad378cc348/html5/thumbnails/37.jpg)
© All rights reserved. Zend Technologies, Inc.
Thank you!
● More information
▶ http://framework.zend.com● IRC channels (freenode)
▶ #zftalk, #zftalk.dev