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:

Share or Bookmark

Share or Bookmark this page using the following services. You will need to have an account with the selected service in order to post links or bookmark this page.

Subscribe or Follow

Subscribe via RSS or email, or follow me on Facebook or Twitter below. The RSS icon takes you through to Feedburner where you can select the service or application to use.

Comments

blog comments powered by Disqus