2013-02-27 8 views
6

Verfolgt das Cake Book Beispiel fast genau.CakePHP REST Basic Mapping funktioniert nicht wie erwartet

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

Sowohl vor

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

Mein Controller genannt IncidentReportsController

class IncidentReportsController extends AppController { 

Welche Funktionen enthält

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

an die URL gehen

www.myurl.com/incidentReports.json 

Sendet die Anfrage an die Funktion index() wie erwartet.

Going to the URL

www.myurl.com/incidentReports/260.json 

zur Ansicht() Funktion Karte Sollte aber Trys auf eine 260() Funktion zur Karte, die nicht existiert.

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

Funktioniert auf die Funktion view() und funktioniert ordnungsgemäß. Mein Verständnis ist jedoch die "Ansicht" in der URL sollte nicht notwendig sein.

+1

Haben Sie die 'RequestHandlerComponent' in Ihren App- oder IncidentReportsController eingebunden? – nahri

+0

Es ist da drin. Aber danke für die Idee. – user2004338

+0

Wie haben Sie die Anfrage versucht? mit einem Browser? Schon versucht es mit einem Rest-Client wie Postman (eine Google Chrome Browser App)? Ein anderes Problem könnte sein, dass der RequestHandler nur den "Accept" Header in der HTTP Anfrage betrachtet. Dort benötigen Sie ein 'Accept: application/json' oder das' RequestHandler' behandelt es als normalen GET Request. – nahri

Antwort

0

Nach der documentation haben Sie alles richtig gemacht, also bin ich mir nicht sicher. Versuchen Sie, diese (die Routen, die aktiviert werden sollen) auch in Ihre Routen aufzunehmen.

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

Genau meine Gedanken, habe ich gerade richtig gemacht, bevor ich diese Frage gestellt habe. Keine Änderung. – user2004338

3

Hatte das gleiche Problem. In meinem Fall konnte ich das beheben, indem ich den Controller-Namen in der URL änderte.

Hat nicht funktioniert: http://www.example.com/entityName.json
Adaequat: http://www.example.com/entity_name.json

+0

Eigentlich macht das Sinn. Die 'mapResources'-Funktion führt zum Controller-Namen einen 'Inflector :: -Unterstrich', so dass es beispielsweise keine Übereinstimmung zwischen 'entityName /: action' und' entity_name /: action' geben würde. Dies geschieht seit Version 1.3 (oder vorher, nicht überprüft). [API-Referenz] (http://api.cakephp.org/2.2/source-class-Router.html#462-510). – Nunser

0

Wenn Ihr Controller innerhalb eines Plugins ist, können Sie auch ..

zB angeben muss: Router :: mapResources ('Plugin. Regler');

Verwandte Themen