SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Request Lifecycle im
Zend Framework

Markus Handschuh I 31.03.2011




                                © Mayflower GmbH 2010
Agenda



I Application Bootstrap
   · Resources
I Zend_Controller_Front
   · Plugins
I Routing
I Dispatcher
I Die Action und ihre Helper




                               Mayflower GmbH I 2
Application Bootstrap




                        Mayflower GmbH I 3
Application Bootstrap


index.php


/* Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap()
            ->run();




                                                    Mayflower GmbH I 4
Application Bootstrap




I Bootstrapping von Class Resources


I Bootstrapping von Plugin Resources


I Run Zend_Controller_Front->dispatch()




                                          Mayflower GmbH I 5
Application Bootstrap
Bootstrapping von Class Resources


I Methoden müssen protected sein..
   ·… und mit _init vorangestellt sein


Beispiel
protected function _initLog() {}




                                         Mayflower GmbH I 6
Application Bootstrap
Bootstrapping von Class Resources

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initRequest()
    {
        $this->bootstrap('FrontController');
        $front = $this->getResource('FrontController');
        $request = new Zend_Controller_Request_Http();

        // your code
        // ...
        // e.g.
        $request->setBaseUrl('/mypath');

        $front->setRequest($request);
        return $request;
    }
}


                                                               Mayflower GmbH I 7
Application Bootstrap
Bootstrapping von Plugin Resources


I Die Klasse muss abgeleitet sein von
  Zend_Application_Resource_ResourceAbstract


I Die Klasse muss eine init()-Methode implementieren


Beispiel
class My_Resource_Test
    extends Zend_Application_Resource_ResourceAbstract {}




                                                            Mayflower GmbH I 8
Application Bootstrap
Bootstrapping von Plugin Resources
class My_Bootstrap_Resource_Request
    extends Zend_Application_Resource_ResourceAbstract
{

    public function init()
    {
        $this->getBootstrap()->bootstrap('FrontController');
        $front = $this->getBootstrap()
                      ->getResource('FrontController');

        $request = new Zend_Controller_Request_Http();

        // your code ...

        $front->setRequest($request);
        return $request;
    }

}

                                                               Mayflower GmbH I 9
Zend_Controller_Front




                        Mayflower GmbH I 10
Mayflower GmbH I 11
Zend_Controller_Front


I Setzt das Request Object ( Zend_Controller_Request_Http)

I Setzt das Response Object (Zend_Constroller_Response_Http)
I Setzt das Request- und Response-Object im Plugin Broker
    · routeStartup()
    · routeShutdown()
    · dispatchLoopStartup()
    · preDispatch()
    · postDispatch()
    · dispatchLoopShutdown()
I Initialisiert die Router

I Initialisiert den Dispatcher


                                                             Mayflower GmbH I 12
Eigene Front Controller Plugins



class My_Controller_Plugin_Request
    extends Zend_Controller_Plugin_Abstract
{

    public function dispatchLoopStartup(
                    Zend_Controller_Request_Abstract $request)
    {
        $request->setModuleName('blog')
                ->setControllerName('entries')
                ->setActionName('index');

        return $request;
    }

}




                                                             Mayflower GmbH I 13
Routing




          Mayflower GmbH I 14
Routing



I Verwendet standardmäßig den Rewrite-Router
   · Zend_Controller_Router_Rewrite
       Verwendet die Module-Route zum erkennen der Anfrage



Beispiel
HTTP Request: http://mysite.com/user/authentication/login

Module-Route:    module     => user,
                 controller => authentication,
                 action     => login




                                                              Mayflower GmbH I 15
Routing




I Erlaubte Route-Typen
   · Zend_Controller_Router_Route_Static
   · Zend_Controller_Router_Route_Regex
   · Zend_Controller_Router_Route_Hostname
   · Zend_Controller_Router_Route_Chain
   · Zend_Controller_Router_Route_Module




                                             Mayflower GmbH I 16
Dispatch




           Mayflower GmbH I 17
Dispatch Action Controller



Erstelle Instanz des Action Controllers


I Instanziere den Action Helper Broker
   ·  Instanziere alle registrierten Action Helper
        Rufe die init()-Methode der Action Helper auf

I Rufe die init() Methode des Action Controllers auf


I Gepufferte Ausgabe in den Response-Body schreiben




                                                         Mayflower GmbH I 18
Die Action und
  ihre Helper




                 Mayflower GmbH I 19
Controller Dispatch



I Ausgabe puffern (ob_start())
I Rufe die dispatch()-Methode des Action Controllers auf
   · ActionHelper::preDispatch()
   · Controller::preDispatch()
   · myAction()
   · Controller::postDispatch()
   · ActionHelper::postDispatch()




                                                           Mayflower GmbH I 20
Action Helper



I Der Helper muss abgeleitet sein von
 Zend_Controller_Action_Helper_Abstract



I Hinzufügen von Helper/Prefixen/Pfaden:
   · addHelper()
   · addPrefix()
   · addPath()




                                           Mayflower GmbH I 21
Action Helper


class My_Controller_Action_Helper_Credentials
    extends Zend_Controller_Action_Helper_Abstract
{
    protected $_columns = array();

    public function init()
    {
        $this->_columns = array('username',
                                'password');
    }

    public function get()
    {
        // retrieve the credentials map
        return $this->_columns;
    }
}


                                                     Mayflower GmbH I 22
Action Controller

class User_AuthenticationController
    extends Zend_Controller_Action
{

    public function init()
    {
        Zend_Controller_Action_HelperBroker
        ::addPrefix('My_Controller_Action_Helper');
    }

    public function loginAction()
    {
        $credentialColumns = $this->_helper->Credentials->get();

        $this->view->assign('credentialColumns',
                            $credentialColumns);
    }

}

                                                             Mayflower GmbH I 23
Vielen Dank für Ihre Aufmerksamkeit!




       Kontakt   Markus Handschuh
                 markus.handschuh@mayflower.de
                 +49 89 242054 1130
                 Mayflower GmbH
                 Mannhardtstrasse6
                 80538 München


07.07.11                              Mayflower GmbH   25

Contenu connexe

Similaire à Request Lifecycle im Zend Framework

Präsentation webservices
Präsentation webservicesPräsentation webservices
Präsentation webservicesxxtesaxx
 
Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Manfred Steyer
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzeRalf Lütke
 
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian BlumPHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian BlumSebastian Blum
 
Slides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdfSlides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdfAlexanderStz1
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Manfred Steyer
 
JS Best Practises Debugging und Logging
JS Best Practises Debugging und LoggingJS Best Practises Debugging und Logging
JS Best Practises Debugging und LoggingMayflower GmbH
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenRalf Eggert
 
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenJens Klein
 
Die Kunst Des Software Design
Die Kunst Des Software DesignDie Kunst Des Software Design
Die Kunst Des Software DesignStephan Schmidt
 
Stored Procedures in MySQL
Stored Procedures in MySQLStored Procedures in MySQL
Stored Procedures in MySQLMayflower GmbH
 

Similaire à Request Lifecycle im Zend Framework (15)

Präsentation webservices
Präsentation webservicesPräsentation webservices
Präsentation webservices
 
MVVM Pattern
MVVM Pattern MVVM Pattern
MVVM Pattern
 
Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Der neue Component Router für Angular 2
Der neue Component Router für Angular 2
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-Ansätze
 
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian BlumPHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
 
Slides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdfSlides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdf
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1
 
Modulsystem in Drupal
Modulsystem in DrupalModulsystem in Drupal
Modulsystem in Drupal
 
MVVM mit WPF
MVVM mit WPFMVVM mit WPF
MVVM mit WPF
 
JS Best Practises Debugging und Logging
JS Best Practises Debugging und LoggingJS Best Practises Debugging und Logging
JS Best Practises Debugging und Logging
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellen
 
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
 
Die Kunst Des Software Design
Die Kunst Des Software DesignDie Kunst Des Software Design
Die Kunst Des Software Design
 
Stored Procedures in MySQL
Stored Procedures in MySQLStored Procedures in MySQL
Stored Procedures in MySQL
 

Plus de Mayflower GmbH

Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...Mayflower GmbH
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: SecurityMayflower GmbH
 
Vom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftVom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftMayflower GmbH
 
Salt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientSalt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientMayflower GmbH
 
Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingMayflower GmbH
 
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...Mayflower GmbH
 
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyNative Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyMayflower GmbH
 
Pair Programming Mythbusters
Pair Programming MythbustersPair Programming Mythbusters
Pair Programming MythbustersMayflower GmbH
 
Shoeism - Frau im Glück
Shoeism - Frau im GlückShoeism - Frau im Glück
Shoeism - Frau im GlückMayflower GmbH
 
Bessere Software schneller liefern
Bessere Software schneller liefernBessere Software schneller liefern
Bessere Software schneller liefernMayflower GmbH
 
Von 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 SprintsVon 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 SprintsMayflower GmbH
 
Piwik anpassen und skalieren
Piwik anpassen und skalierenPiwik anpassen und skalieren
Piwik anpassen und skalierenMayflower GmbH
 
Agilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce BreakfastAgilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce BreakfastMayflower GmbH
 

Plus de Mayflower GmbH (20)

Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
 
Why and what is go
Why and what is goWhy and what is go
Why and what is go
 
Agile Anti-Patterns
Agile Anti-PatternsAgile Anti-Patterns
Agile Anti-Patterns
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
Vom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftVom Entwickler zur Führungskraft
Vom Entwickler zur Führungskraft
 
Produktive teams
Produktive teamsProduktive teams
Produktive teams
 
Salt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientSalt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native Client
 
Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debugging
 
Usability im web
Usability im webUsability im web
Usability im web
 
Rewrites überleben
Rewrites überlebenRewrites überleben
Rewrites überleben
 
JavaScript Security
JavaScript SecurityJavaScript Security
JavaScript Security
 
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
 
Responsive Webdesign
Responsive WebdesignResponsive Webdesign
Responsive Webdesign
 
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyNative Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
 
Pair Programming Mythbusters
Pair Programming MythbustersPair Programming Mythbusters
Pair Programming Mythbusters
 
Shoeism - Frau im Glück
Shoeism - Frau im GlückShoeism - Frau im Glück
Shoeism - Frau im Glück
 
Bessere Software schneller liefern
Bessere Software schneller liefernBessere Software schneller liefern
Bessere Software schneller liefern
 
Von 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 SprintsVon 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 Sprints
 
Piwik anpassen und skalieren
Piwik anpassen und skalierenPiwik anpassen und skalieren
Piwik anpassen und skalieren
 
Agilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce BreakfastAgilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce Breakfast
 

Request Lifecycle im Zend Framework

  • 1. Request Lifecycle im Zend Framework Markus Handschuh I 31.03.2011 © Mayflower GmbH 2010
  • 2. Agenda I Application Bootstrap · Resources I Zend_Controller_Front · Plugins I Routing I Dispatcher I Die Action und ihre Helper Mayflower GmbH I 2
  • 3. Application Bootstrap Mayflower GmbH I 3
  • 4. Application Bootstrap index.php /* Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run(); Mayflower GmbH I 4
  • 5. Application Bootstrap I Bootstrapping von Class Resources I Bootstrapping von Plugin Resources I Run Zend_Controller_Front->dispatch() Mayflower GmbH I 5
  • 6. Application Bootstrap Bootstrapping von Class Resources I Methoden müssen protected sein.. ·… und mit _init vorangestellt sein Beispiel protected function _initLog() {} Mayflower GmbH I 6
  • 7. Application Bootstrap Bootstrapping von Class Resources class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initRequest() { $this->bootstrap('FrontController'); $front = $this->getResource('FrontController'); $request = new Zend_Controller_Request_Http(); // your code // ... // e.g. $request->setBaseUrl('/mypath'); $front->setRequest($request); return $request; } } Mayflower GmbH I 7
  • 8. Application Bootstrap Bootstrapping von Plugin Resources I Die Klasse muss abgeleitet sein von Zend_Application_Resource_ResourceAbstract I Die Klasse muss eine init()-Methode implementieren Beispiel class My_Resource_Test extends Zend_Application_Resource_ResourceAbstract {} Mayflower GmbH I 8
  • 9. Application Bootstrap Bootstrapping von Plugin Resources class My_Bootstrap_Resource_Request extends Zend_Application_Resource_ResourceAbstract { public function init() { $this->getBootstrap()->bootstrap('FrontController'); $front = $this->getBootstrap() ->getResource('FrontController'); $request = new Zend_Controller_Request_Http(); // your code ... $front->setRequest($request); return $request; } } Mayflower GmbH I 9
  • 10. Zend_Controller_Front Mayflower GmbH I 10
  • 12. Zend_Controller_Front I Setzt das Request Object ( Zend_Controller_Request_Http) I Setzt das Response Object (Zend_Constroller_Response_Http) I Setzt das Request- und Response-Object im Plugin Broker · routeStartup() · routeShutdown() · dispatchLoopStartup() · preDispatch() · postDispatch() · dispatchLoopShutdown() I Initialisiert die Router I Initialisiert den Dispatcher Mayflower GmbH I 12
  • 13. Eigene Front Controller Plugins class My_Controller_Plugin_Request extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup( Zend_Controller_Request_Abstract $request) { $request->setModuleName('blog') ->setControllerName('entries') ->setActionName('index'); return $request; } } Mayflower GmbH I 13
  • 14. Routing Mayflower GmbH I 14
  • 15. Routing I Verwendet standardmäßig den Rewrite-Router · Zend_Controller_Router_Rewrite  Verwendet die Module-Route zum erkennen der Anfrage Beispiel HTTP Request: http://mysite.com/user/authentication/login Module-Route: module => user, controller => authentication, action => login Mayflower GmbH I 15
  • 16. Routing I Erlaubte Route-Typen · Zend_Controller_Router_Route_Static · Zend_Controller_Router_Route_Regex · Zend_Controller_Router_Route_Hostname · Zend_Controller_Router_Route_Chain · Zend_Controller_Router_Route_Module Mayflower GmbH I 16
  • 17. Dispatch Mayflower GmbH I 17
  • 18. Dispatch Action Controller Erstelle Instanz des Action Controllers I Instanziere den Action Helper Broker · Instanziere alle registrierten Action Helper Rufe die init()-Methode der Action Helper auf I Rufe die init() Methode des Action Controllers auf I Gepufferte Ausgabe in den Response-Body schreiben Mayflower GmbH I 18
  • 19. Die Action und ihre Helper Mayflower GmbH I 19
  • 20. Controller Dispatch I Ausgabe puffern (ob_start()) I Rufe die dispatch()-Methode des Action Controllers auf · ActionHelper::preDispatch() · Controller::preDispatch() · myAction() · Controller::postDispatch() · ActionHelper::postDispatch() Mayflower GmbH I 20
  • 21. Action Helper I Der Helper muss abgeleitet sein von Zend_Controller_Action_Helper_Abstract I Hinzufügen von Helper/Prefixen/Pfaden: · addHelper() · addPrefix() · addPath() Mayflower GmbH I 21
  • 22. Action Helper class My_Controller_Action_Helper_Credentials extends Zend_Controller_Action_Helper_Abstract { protected $_columns = array(); public function init() { $this->_columns = array('username', 'password'); } public function get() { // retrieve the credentials map return $this->_columns; } } Mayflower GmbH I 22
  • 23. Action Controller class User_AuthenticationController extends Zend_Controller_Action { public function init() { Zend_Controller_Action_HelperBroker ::addPrefix('My_Controller_Action_Helper'); } public function loginAction() { $credentialColumns = $this->_helper->Credentials->get(); $this->view->assign('credentialColumns', $credentialColumns); } } Mayflower GmbH I 23
  • 24. Vielen Dank für Ihre Aufmerksamkeit! Kontakt Markus Handschuh markus.handschuh@mayflower.de +49 89 242054 1130 Mayflower GmbH Mannhardtstrasse6 80538 München 07.07.11 Mayflower GmbH 25