SAAS-1063: REST API for podcasts
Hierarchy routing is working Basic implentation of podcast INDEX and POST actions done
This commit is contained in:
parent
a444751397
commit
67db2c1d25
9 changed files with 391 additions and 9 deletions
|
@ -0,0 +1,108 @@
|
|||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* Class Rest_RouteController
|
||||
*
|
||||
* Taken from https://github.com/aporat/Application_Rest_Controller_Route
|
||||
* to enable hierarchy routing
|
||||
*/
|
||||
|
||||
class Rest_RouteController extends Zend_Controller_Router_Route
|
||||
{
|
||||
|
||||
/**
|
||||
* @var Zend_Controller_Front
|
||||
*/
|
||||
protected $_front;
|
||||
|
||||
protected $_actionKey = 'action';
|
||||
|
||||
/**
|
||||
* Prepares the route for mapping by splitting (exploding) it
|
||||
* to a corresponding atomic parts. These parts are assigned
|
||||
* a position which is later used for matching and preparing values.
|
||||
*
|
||||
* @param Zend_Controller_Front $front Front Controller object
|
||||
* @param string $route Map used to match with later submitted URL path
|
||||
* @param array $defaults Defaults for map variables with keys as variable names
|
||||
* @param array $reqs Regular expression requirements for variables (keys as variable names)
|
||||
* @param Zend_Translate $translator Translator to use for this instance
|
||||
*/
|
||||
public function __construct(Zend_Controller_Front $front, $route, $defaults = array(), $reqs = array(), Zend_Translate $translator = null, $locale = null)
|
||||
{
|
||||
$this->_front = $front;
|
||||
$this->_dispatcher = $front->getDispatcher();
|
||||
|
||||
parent::__construct($route, $defaults, $reqs, $translator, $locale);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Matches a user submitted path with parts defined by a map. Assigns and
|
||||
* returns an array of variables on a successful match.
|
||||
*
|
||||
* @param string $path Path used to match against this routing map
|
||||
* @return array|false An array of assigned values or a false on a mismatch
|
||||
*/
|
||||
public function match($path, $partial = false)
|
||||
{
|
||||
|
||||
|
||||
$return = parent::match($path, $partial);
|
||||
|
||||
// add the RESTful action mapping
|
||||
if ($return) {
|
||||
$request = $this->_front->getRequest();
|
||||
$path = $request->getPathInfo();
|
||||
$params = $request->getParams();
|
||||
|
||||
$path = trim($path, self::URI_DELIMITER);
|
||||
|
||||
if ($path != '') {
|
||||
$path = explode(self::URI_DELIMITER, $path);
|
||||
}
|
||||
|
||||
//Store path count for method mapping
|
||||
$pathElementCount = count($path);
|
||||
|
||||
// Determine Action
|
||||
$requestMethod = strtolower($request->getMethod());
|
||||
if ($requestMethod != 'get') {
|
||||
if ($request->getParam('_method')) {
|
||||
$return[$this->_actionKey] = strtolower($request->getParam('_method'));
|
||||
} elseif ( $request->getHeader('X-HTTP-Method-Override') ) {
|
||||
$return[$this->_actionKey] = strtolower($request->getHeader('X-HTTP-Method-Override'));
|
||||
} else {
|
||||
$return[$this->_actionKey] = $requestMethod;
|
||||
}
|
||||
|
||||
// Map PUT and POST to actual create/update actions
|
||||
// based on parameter count (posting to resource or collection)
|
||||
switch( $return[$this->_actionKey] ){
|
||||
case 'post':
|
||||
$return[$this->_actionKey] = 'post';
|
||||
break;
|
||||
case 'put':
|
||||
$return[$this->_actionKey] = 'put';
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
// if the last argument in the path is a numeric value, consider this request a GET of an item
|
||||
$lastParam = array_pop($path);
|
||||
if (is_numeric($lastParam)) {
|
||||
$return[$this->_actionKey] = 'get';
|
||||
} else {
|
||||
$return[$this->_actionKey] = 'index';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $return;
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue