2013-02-27 16 views
6

Podążamy za przykładem Cake Book prawie dokładnie.Mapowanie podstawowe CakePHP REST nie działa zgodnie z oczekiwaniami.

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

Zarówno przed

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

mojego kontrolera zwanego IncidentReportsController

class IncidentReportsController extends AppController { 

który zawiera funkcje

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

przechodząc do adresu URL

www.myurl.com/incidentReports.json 

Wysyła żądanie do funkcji index() zgodnie z oczekiwaniami.

Przechodzenie do adresu URL

www.myurl.com/incidentReports/260.json 

Gdyby map do funkcji widoku(), ale jakoś wpasować do mapowania funkcji 260(), która nie istnieje.

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

Czy mapuje do funkcji view() i działa poprawnie. Jednak moim zrozumieniem jest "widok" w adresie URL nie powinien być konieczny.

+1

Czy włączono 'RequestHandlerComponent' w App- lub IncidentReportsController? – nahri

+0

Jest tam. Ale dziękuję ci za ten pomysł. – user2004338

+0

Jak wypróbowałeś tę prośbę? z przeglądarką? Wypróbowałeś go już z klientem-klientem, takim jak Postman (aplikacja przeglądarki Google Chrome)? Innym problemem może być to, że RequestHandler analizuje tylko nagłówek 'Accept' w żądaniu HTTP. Tam potrzebujesz 'Accept: application/json' lub' RequestHandler' traktuje to jako normalne żądanie GET. – nahri

Odpowiedz

0

Zgodnie z documentation, zrobiłeś wszystko dobrze, więc nie jestem pewien. Spróbuj umieścić to (trasy, które powinny być włączone) na twoich trasach.

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

Dokładnie moje myśli, właśnie zrobiłem to tuż przed opublikowaniem tego pytania. Bez zmiany. – user2004338

3

Miał ten sam problem. W moim przypadku udało mi się to naprawić, zmieniając nazwę kontrolera w adresie URL.

nie działa: http://www.example.com/entityName.json
działa dobrze: http://www.example.com/entity_name.json

+0

Właściwie to ma sens. Funkcja 'mapResources' przypisuje nazwę kontrolera' Inflector :: underscore', więc nie byłoby na przykład dopasowania pomiędzy 'entityName /: action' i' entity_name /: action'. Dzieje się tak od wersji 1.3 (lub wcześniej, nie sprawdzono). [Odwołanie do interfejsu API] (http://api.cakephp.org/2.2/source-class-Router.html#462-510). – Nunser

0

Jeśli kontroler jest w wtyczce, należy określić, jak dobrze ..

np Router :: mapResources ("wtyczki. Kontroler');

Powiązane problemy