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?
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
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
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
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
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