10

I am using Zend F/W 1.12 in order to build a REST server. One of my requirements are to have an action that Is outside the boundaries of what Zend can recognize as a "Restfull" action. What I mean is that I would like to have an action that is called something like mymedia and would like tou routes requests that are directed to //mymedia . Currently, Zend understand it as the id to a getAction and off course this is not what I want.

Any help will be highly appreciated! Thanks

Alon1980
  • 1,225
  • 1
  • 16
  • 30

2 Answers2

3

The implementation of Zend_Rest_Route does not allow much customization but instead provides a rudimental routing scheme for out-of-the-box usage.

So if you need to change the way how URIs are interpreted you can extend Zend_Rest_Route, Zend_Controller_Router_Route_Module or Zend_Controller_Router_Route_Abstract class to create your own kind of routing.

Have a look at the match method of those classes and what they do - e.g. they populate the $_values property array (while respecting the $_moduleKey, $_controllerKey and $_actionKey properties).

You can then add it e.g. as the first route within your bootstrap class:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->addRoute('myRoute', new My_Route($frontController));
$router->addRoute('restRoute', new Zend_Rest_Route($frontController));

See:

http://framework.zend.com/manual/1.12/en/zend.controller.router.html#zend.controller.router.basic

Routing is a simple process of iterating through all provided routes and matching its definitions to current request URI. When a positive match is found, variable values are returned from the Route instance and are injected into the Zend_Controller_Request object for later use in the dispatcher as well as in user created controllers. On a negative match result, the next route in the chain is checked.

conceptdeluxe
  • 3,753
  • 3
  • 25
  • 29
0

I once wrote a custom route for zend framework 1 that can handle custom restful routes. it served me well until now. see https://github.com/aporat/Application_Rest_Controller_Route for more details.

for example, if you want to have a url such as /users/30/messages mapped correctly into a zend controller action, use this route in your bootstrap:

$frontController = Zend_Controller_Front::getInstance();
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));
aporat
  • 5,922
  • 5
  • 32
  • 54
  • although it is not exactly the answer it did point me to the right direction so thanks! eventually i just added another Zend_Route with constant controller, module and action. – Alon1980 Oct 22 '15 at 09:00
  • Unfortunately it seems that repository is no longer available, so the link is broken. – Luís Cruz Jun 22 '17 at 14:23