By
Apex TG India Pvt Ltd
http://www.apextgi.in
Model View Controller design pattern
Model
Classes that access your data
View
Templates to present that data (e.g. HTML for browser)
Controller (action controller)
Application flow
Connects model and view
(Bonus: front controller!)
Front Controller
Front controller pattern
Front controller sits in front of MVC
All PHP requests funneled through index.php (bootstrap file)
Front controller gets your application started
Initializes request/response objects
Can handle common settings and functionality
Include paths
Configurations
Location of MVC components (if necessary)
Logging, db (perhaps), authentication/authorization
Converts URL to a request object with distinct parts
Routes requests to appropriate action controllers
Receives exceptions
Front controller to action controller
Routes URL request
Default routing convention:
http://example.com/controller/action/param1/value1...
Controller maps
to class name
Action maps to
method name
Param/value pairs
are passed to
action
http
reques
t
Controller1
action1()
action2()
Bootstrap:
index.php
Front
Controller
Controller2
action1()
action2()
Front controller needs two files in
public folder
In document root
(public folder):
1. .htaccess
redirects requests
to bootstrap script
(index.php)
2. index.php
instantiates
Front Controller
Front controller file #1: .htaccess
RewriteEngine on
# funnel all requests to index.php
# except requests for static resources
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
Front controller file #2: index.php
<?php
// bootstrap file
setincludepath('.' . PATHSEPARATOR . '../library' . PATHSEPARATOR
. '../application/default/models/' . PATHSEPARATOR .
getincludepath());
// Prepare the front controller
$frontController = Zend_Controller_Front::getInstance();
// Dispatch the request using the front controller
$frontController->dispatch();
Action Controller
Action Controller
Controller classes handle groups of request URLs
http://example.com/controller/action
Default: IndexController
Organizes and groups functionality
One class (extending Zend_Controller_Action) for each controller
Action methods in each controller class handle
requests
http://example.com/controller/action
Default: indexAction()
Named like actionAction()
Example: If action is edit then method is editAction()
More controller functionality
Several standard methods help organize and
control the flow
init() called by the constructor
preDispatch() called before the actions method
postDispatch() called after the actions method
Utility methods
forward(), redirect(), getParam(), getRequest(), getResponse(), render()
Action helpers add functionality
Built-in helpers. Example: gotoSimple()
Your own helpers
Avoids the need to build your own base controller class
Controller example
Action helpers
They extendZend_Controller_Action_Helper_Abstract
Built-in action helpers
ActionStack
AjaxContext
AutoComplete: Dojo, Scriptaculous
ContextSwitch
FlashMessenger
Json
Redirector
Url
ViewRenderer
Create your own
Placein the "My/Helper/" directory of your library (or any directory on your
includepath)
Action helper example: Redirector
gotoSimple()
classForward_ControllerextendsZend_Controller_Action
{
protected$redirector=null;
publicfunctioninit()
{
$this->redirector=$this->helper->getHelper('Redirector');
}
publicfunctionmyAction()
{
/*dosomestuff*/
//Redirectto'my-action'of'my-controller'inthecurrent
//module,usingtheparamsparam1=>testandparam2=>test2
$this->redirector->gotoSimple('my-action',
'my-controller',
null,
array('param1'=>'test',
'param2'=>'test2'
)
);
}
}
Questions?
Send me your thoughts: [email protected]
See you at APEX
TG!