Pregunta

Con el Zend Framework, estoy tratando de construir rutas para una API REST de recursos organizados en el siguiente patrón:

¿Cómo puedo configurar esto con Zend_Rest_Route?

Así es como he fijado la ruta para el recurso a los usuarios (usuarios /: id) en mi archivo Bootstrap.php:

  $this->bootstrap('frontController');
  $frontController = Zend_Controller_Front::getInstance();
  $restRoute = new Zend_Rest_Route($frontController);
  $frontController->getRouter()->addRoute('default', $restRoute);

[Por lo que yo entiendo, este es un cajón de sastre ruta para los usuarios / 324 / artículos / 34 causan un conjunto de parámetros como id = 324 y artículos = 34 y todo se asigna a los usuarios (módulo frontal) Modelo . A partir de ahí creo que sólo podría poner a prueba para el parámetro artículos y recuperar el elemento # 34 para el usuario # 324 en una petición GET] <=== acabo de comprobar y que no parece que funciona así:.

acessing / usuarios / 234 / objetos / 43 y

var_dump($this->_getAllParams());

en la acción Get de los resultados de controlador de descanso en la salida siguiente:

array(4) {
 ["controller"]=> string(5) "users"
 ["action"]=>  string(3) "get"
 [2]=>  string(5) "items"  ["module"]=>  string(7) "default"]
}

De alguna manera ambos se perdieron las identificaciones ...

Cualquier persona?

¿Fue útil?

Solución

Que yo sepa, no hay ninguna característica en Zend_Rest_Route que le permite hacer algo como esto. Hay una propuesta, pero no está seguro de cuando va a ser implementado. Puede agregar esto en su Bootstrap para configurar esta ruta personalizada.

$front = $this->getResource('FrontController'); 
$testRoute = new Zend_Controller_Router_Route(
    'users/:user_id/items/:item_id',
    array(
        'controller' => 'users',
        'action' => 'item',
        'module' => 'default'
    )
);

$front->getRouter()->addRoute('test', $testRoute);

user_id o item_id estén disponibles en itemAction en UsersController como parámetros:

$user_id = $this->_request->getParam('user_id');

Otros consejos

I de código abierto de la solución en GitHub y como un paquete compositor. ver https://github.com/aporat/Application_Rest_Controller_Route .

He añadido una nueva clase que se extiende Zend_Controller_Router_Route y añade abiliy para añadir rutas a medida de descanso, como

$frontController = Zend_Controller_Front::getInstance();
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));

Zend_Rest_Route MAPAS El primer parámetro después de que el nombre de controlador a 'id' sólo cuando hay 1 parámetro.

La mejor solución que he llegado con es subclase Zend_Rest_Route y anular la función de concordancia (). Copiar función de concordancia de Zend_Rest_Route, además de añadir los siguientes justo antes del comentario "Digesto URI Parámetros" (alrededor de 60 líneas en).

if($pathElementCount > 1 && $path[0] != 'id') {
    $params['id'] = urldecode($path[0]);
    array_shift($path);
}  

Eso te dará la funcionalidad que está buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top