2015-09-24 46 views
10

Sto utilizzando Zend F/W 1.12 per creare un server REST. Uno dei miei requisiti è quello di avere un'azione che è al di fuori dei limiti di ciò che Zend può riconoscere come un'azione "Restfull". Quello che voglio dire è che mi piacerebbe avere un'azione che si chiami qualcosa come mymedia e vorrei instradare richieste indirizzate a // mymedia. Attualmente, Zend lo capisce come l'id di un getAction e ovviamente questo non è ciò che voglio.Aggiunta percorso personalizzato al controller Zend REST

Qualsiasi aiuto sarà molto apprezzato! Grazie

risposta

0

Una volta ho scritto un percorso personalizzato per zend framework 1 in grado di gestire percorsi personalizzati restful. mi è servito bene fino ad ora. vedi https://github.com/aporat/Application_Rest_Controller_Route per maggiori dettagli.

per esempio, se si vuole avere un URL come /users/30/messages mappata correttamente in un'azione di controllo Zend, utilizzare questo percorso nel vostro bootstrap:

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

anche se non è esattamente la risposta che mi ha fatto puntare a la giusta direzione quindi grazie! alla fine ho appena aggiunto un altro Zend_Route con controller, modulo e azione costanti. – Alon1980

+0

Sfortunatamente sembra che il repository non sia più disponibile, quindi il link è rotto. –

3

L'implementazione di Zend_Rest_Route non consente molta personalizzazione ma fornisce invece uno schema di routing rudimentale per l'utilizzo immediato.

Quindi, se avete bisogno di cambiare il modo in cui vengono interpretati URI è possibile estendere Zend_Rest_Route, Zend_Controller_Router_Route_Module o Zend_Controller_Router_Route_Abstract classe per creare il proprio tipo di routing.

Dai un'occhiata al metodo match di quelle classi e cosa fanno - ad es. popolano l'array di proprietà $_values (nel rispetto delle proprietà $_moduleKey, $_controllerKey e $_actionKey).

È quindi possibile aggiungerlo, ad es. come il primo percorso all'interno della vostra classe di bootstrap:

$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 è un semplice processo di iterazione attraverso tutte le rotte fornite e la congruenza sue definizioni di richiesta corrente URI. Quando viene trovata una corrispondenza positiva, i valori delle variabili vengono restituiti dall'istanza Route e vengono iniettati nell'oggetto Zend_Controller_Request per un utilizzo successivo nel dispatcher e nei controller creati dall'utente. Su un risultato di corrispondenza negativo, viene controllato il prossimo percorso nella catena.