Zend Framework Controller Router exampleZend 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:

Comments

blog comments powered by Disqus