2010-02-01 4 views
0

Voici mon problème spécifique. Je veux faire un niveau api qui ensuite, vous pouvez sélectionner la méthode que vous utiliserez. Par exemple:Zend Framework - Comment faire une hiérarchie sans que ce soit un module?

test.com/api/rest

test.com/api/xmlprc

Actuellement, j'ai cartographie api dans un répertoire du module. J'ai ensuite mis en place un itinéraire pour en faire une route de repos. test.com/api est une route de repos, mais je préférerais que ce soit test.com/api/rest. Cela me permettrait plus tard d'en ajouter d'autres.

En Bootstrap.php:

 $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 
    $route = new Zend_Controller_Router_Route(
'api/:module/:controller/:id/*', 
array('module' =>'default') 

);

$ router-> addRoute ('api', $ route);

$ restRoute = new Zend_Rest_Route (avant de $, array(), tableau ( 'repos' )); $ router-> addRoute ('reste', $ restRoute);

return $ routeur;

En application.ini:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

Je sais que cela va impliquer les routes, mais parfois je trouve être un peu difficile à suivre la documentation Zend Framework. Quand je vais sur test.com/rest/controller/, ça marche comme il se doit, mais si je vais sur test.com/api/rest/ cela me dit que mon module est api et que le contrôleur est repos.

Répondre

0

Vous pouvez réellement faire quelque chose comme api /: controller /: action.json ou api /: controller /: action.xml (j'ai vu beaucoup d'API le faire, ex: Twitter).

Pour ce faire, vous pouvez faire quelque chose comme ceci:

$front = Zend_Controller_Front::getInstance(); 
$router = $front->getRouter(); // returns a rewrite router by default 
$router->addRoute(
      'json_request', 
      new Zend_Controller_Router_Route_Regex(
              '([^-]*)/([^-]*)/([^-]*)\.json', 
              array(
               'controller' => 'index', 
               'action'  => 'index', 
               'request_type' => 'json'), 
              array(
               1 => 'module', 
               2 => 'controller', 
               3 => 'action' 
              ) 
     )); 

Ensuite, il suffit de vérifier votre paramètre « type de demande » et servir la demande en fonction de ce que vous avez. Vous devez également modifier votre mise en page pour encoder JSON ou XML en fonction de votre requête.

Vous auriez besoin d'un module API également avec ceci.

Remarque: veillez à ce que le bootstrap d'un module soit ajouté à TOUS vos modules pour que cette route soit exécutée dans tous les modules. Je suis actuellement en train de vérifier un moyen de résoudre ce problème, donc je ne peux pas vous dire comment le faire.

Espérons que cela a aidé!

0

Votre ligne d'origine était la suivante.

$restRoute = new Zend_Rest_Route($front, array(), array('rest')); 

Pour activer Zend_Rest_Route des contrôleurs spécifiques, ajouter un tableau de noms de contrôleur en tant que valeur de chaque élément de réseau de module.

$restRoute = new Zend_Rest_Route($front, array(), array('api') => array('rest')); 

également référence http://framework.zend.com/manual/en/zend.controller.router.html

J'espère que cela peut aider.

+0

Je veux réellement quelque chose à api/reste /: contrôleur à être repos. donc api/rest/user et api/rest/differentresource à la fois pour être REST. Je veux avoir un dossier api factice à l'avant afin que je puisse offrir d'autres services. – Joshua

Questions connexes