Request Lifecycle im Zend Framework

24
© Mayflower GmbH 2010 Request Lifecycle im Zend Framework Markus Handschuh I 31.03.2011

description

Der Vortrag erklärt den Weg vom HTTP-Request bis zur fertigen Action und was dazwischen passiert. Auszug aus den Inhalten: Wo kann man den Bootstrap manipulieren und erweitern? Welche Möglichkeiten gibt es, sich in den Dispatch einzuhängen?

Transcript of Request Lifecycle im Zend Framework

Page 1: Request Lifecycle im Zend Framework

© Mayflower GmbH 2010

Request Lifecycle imZend Framework

Markus Handschuh I 31.03.2011

Page 2: Request Lifecycle im Zend Framework

Mayflower GmbH I 2

Agenda

I Application Bootstrap

· Resources

I Zend_Controller_Front

· Plugins

I Routing

I Dispatcher

I Die Action und ihre Helper

Page 3: Request Lifecycle im Zend Framework

Mayflower GmbH I 3

Application Bootstrap

Page 4: Request Lifecycle im Zend Framework

Mayflower GmbH I 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();

Page 5: Request Lifecycle im Zend Framework

Mayflower GmbH I 5

Application Bootstrap

I Bootstrapping von Class Resources

I Bootstrapping von Plugin Resources

I Run Zend_Controller_Front->dispatch()

Page 6: Request Lifecycle im Zend Framework

Mayflower GmbH I 6

Application Bootstrap Bootstrapping von Class Resources

I Methoden müssen protected sein..

· … und mit _init vorangestellt sein

Beispielprotected function _initLog() {}

Page 7: Request Lifecycle im Zend Framework

Mayflower GmbH I 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; } }

Page 8: Request Lifecycle im Zend Framework

Mayflower GmbH I 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

Beispielclass My_Resource_Test extends Zend_Application_Resource_ResourceAbstract {}

Page 9: Request Lifecycle im Zend Framework

Mayflower GmbH I 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; } }

Page 10: Request Lifecycle im Zend Framework

Mayflower GmbH I 10

Zend_Controller_Front

Page 11: Request Lifecycle im Zend Framework

Mayflower GmbH I 11

Page 12: Request Lifecycle im Zend Framework

Mayflower GmbH I 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

Page 13: Request Lifecycle im Zend Framework

Mayflower GmbH I 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; } }

Page 14: Request Lifecycle im Zend Framework

Mayflower GmbH I 14

Routing

Page 15: Request Lifecycle im Zend Framework

Mayflower GmbH I 15

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

Routing

Page 16: Request Lifecycle im Zend Framework

Mayflower GmbH I 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

Page 17: Request Lifecycle im Zend Framework

Mayflower GmbH I 17

Dispatch

Page 18: Request Lifecycle im Zend Framework

Mayflower GmbH I 18

Dispatch Action Controller

Erstelle Instanz des Action Controllers

I Instanziere den Action Helper Broker

· Instanziere alle registrierten Action HelperRufe die init()-Methode der Action Helper auf

I Rufe die init() Methode des Action Controllers auf

I Gepufferte Ausgabe in den Response-Body schreiben

Page 19: Request Lifecycle im Zend Framework

Mayflower GmbH I 19

Die Action und ihre Helper

Page 20: Request Lifecycle im Zend Framework

Mayflower GmbH I 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()

Page 21: Request Lifecycle im Zend Framework

Mayflower GmbH I 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()

Page 22: Request Lifecycle im Zend Framework

Mayflower GmbH I 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; }}

Page 23: Request Lifecycle im Zend Framework

Mayflower GmbH I 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); } }

Page 24: Request Lifecycle im Zend Framework

07.07.11 Mayflower GmbH 25

Vielen Dank für Ihre Aufmerksamkeit!

Kontakt Markus Handschuh

[email protected]

+49 89 242054 1130

Mayflower GmbH

Mannhardtstrasse6

80538 München