Zend Framework Controller Router example
Posted April 12th, 2008 in PHP
The first MVC framework I used was Code Igniter but I've decided to give the Zend Framwork a go because I like their approach to use what you need, and after some studying of the controllers and view functionality those parts do more or less exactly what I want. There are ways to add additional routes to the controllers but I couldn't work out initially how to inject them into the controller from the Zend Framwork documentation. This post shows the original example from the Zend Framework documentation and then a more full example which I constructed using other sources.
This is the original example from the Zend Framwork documentation, in the standard router section, with my own bolding added - see below for details.
/* Create a router */
$router = $ctrl->getRouter(); // returns a rewrite router by default
$router->addRoute(
'user',
new Zend_Controller_Router_Route('user/:username', array('controller' => 'user', 'action' => 'info'))
);
I couldn't work out what $ctrl had come from (which I have bolded in the example above) and it wasn't mentioned in the preceding examples or sections. After a little searching on Google, I found some useful examples and got an additional route working, realising that $ctrl was a handle to the controller.
Here's a full example of a bootstrap file, assigning an additional route to the controller:
set_include_path('../library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Controller/Router/Route.php';
$ctrl = Zend_Controller_Front::getInstance();
$router = $ctrl->getRouter();
$route = new Zend_Controller_Router_Route(
'user/:username',
array(
'controller' => 'user',
'action' => 'info'
)
);
$router->addRoute('user', $route);
$ctrl->run('../controllers');
It could also be shortened to be more like the original example like so:
set_include_path('../library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Controller/Router/Route.php';
$ctrl = Zend_Controller_Front::getInstance();
$router = $ctrl->getRouter();
$router->addRoute(
'user',
new Zend_Controller_Router_Route('user/:username', array('controller' => 'user', 'action' => 'info'))
);
$ctrl->run('../controllers');
I've only just started using the Zend Framwork, so there may be better ways of doing the above but for now it seems to work just fine for me.
Related posts:
- Prevent a view rendering with the Zend Framework (Thursday, June 25th 2009)
- Using the Zend_Registry in PHP (Monday, January 19th 2009)
- Method chaining with PHP (Sunday, December 7th 2008)
- Sending email with Zend_Mail (Saturday, August 23rd 2008)
- Database error handling with the Zend Framework (Sunday, May 11th 2008)

Comments
blog comments powered by Disqus