2013-02-27 7 views
6

Seguito quasi esattamente nell'esempio del Cake Book.CakePHP REST Mappatura di base non funziona come previsto

Router::mapResources('incidentReports'); 
Router::parseExtensions('json'); 

Sia prima

require CAKE . 'Config' . DS . 'routes.php'; 

mio controller chiamato IncidentReportsController

class IncidentReportsController extends AppController { 

che contiene le funzioni

index() 
view($id) 
add() 
edit($id) 
delete($id) 

Andando all'URL

0.123.
www.myurl.com/incidentReports.json 

Invia la richiesta alla funzione index() come previsto.

Andando all'URL

www.myurl.com/incidentReports/260.json 

Dovrebbe mappare la funzione di visualizzazione(), ma trys per mappare a una funzione 260() che non esiste.

www.myurl.com/incidentReports/view/260.json 

Mappa alla funzione view() e funziona correttamente. Tuttavia, la mia comprensione è che la "vista" nell'URL non dovrebbe essere necessaria.

+1

Avete incluso il 'RequestHandlerComponent' nella vostra App- o IncidentReportsController? – nahri

+0

È lì dentro. Ma grazie per l'idea. – user2004338

+0

Come hai provato la richiesta? con un browser? L'hai già provato con un client di riposo come Postman (una app per browser di Google Chrome)? Un altro problema potrebbe essere che RequestHandler guarda solo l'intestazione 'Accept' nella richiesta HTTP. C'è bisogno di un 'Accept: application/json' o' RequestHandler' lo tratterà come una normale richiesta GET. – nahri

risposta

0

Secondo lo documentation, hai fatto tutto bene, quindi non sono sicuro. Prova a mettere questo (i percorsi che dovrebbero essere abilitati) anche nei tuoi percorsi.

Router::resourceMap(array(
    array('action' => 'index', 'method' => 'GET', 'id' => false), 
    array('action' => 'view', 'method' => 'GET', 'id' => true), 
    array('action' => 'add', 'method' => 'POST', 'id' => false), 
    array('action' => 'edit', 'method' => 'PUT', 'id' => true), 
    array('action' => 'delete', 'method' => 'DELETE', 'id' => true), 
    array('action' => 'update', 'method' => 'POST', 'id' => true) 
)); 
+0

Esattamente i miei pensieri, l'ho appena fatto prima di postare questa domanda. Nessun cambiamento. – user2004338

3

Aveva lo stesso problema. Nel mio caso sono riuscito a correggerlo cambiando il nome del controller nell'URL.

non ha funzionato: http://www.example.com/entityName.json
funziona bene: http://www.example.com/entity_name.json

+0

In realtà, questo ha senso. La funzione 'mapResources' fa un' Inflector :: underscore' al nome del controller, quindi non ci sarebbe alcuna corrispondenza tra 'entityName /: action' e' entity_name /: action', per esempio. Questo succede dalla versione 1.3 (o prima, non ha controllato). [Riferimento API] (http://api.cakephp.org/2.2/source-class-Router.html#462-510). – Nunser

0

Se il controller è all'interno di un plugin, è necessario specificare come pure ..

esempio: Router :: mapResources ('Plugin. controller ');