2016-11-15 1 views
0

Ich versuche, JSON in eine Add() - Aktion meines Controllers zu übergeben, aber die Antwort ist entweder eine Antwort von der Index() -Aktion oder "null" abhängig von Einträgen in meiner routes.php (siehe unten).CakePHP 3 Hinzufügen von Aktionsrouten zum Index oder Returns Null

Ich verwende Firefox-Plugin RESTClient zu testen/pass json meine Aktionen:

Methode: POST

URL:http://MyApp/notes.json (mein Verständnis ist, sollte dies Aktion nennen hinzufügen, basierend auf cakephp docs)

JSON:

{ 
"post_id":"123", 
"note":"hello world" 
} 

Wenn ich folgend in meinem routes.php habe, ist die Antwort „null“

Router::scope('/', function ($routes) { 
    $routes->extensions(['json']); 
    $routes->resources('Notes'); 

$routes->resources('Notes'); aus diesem Bereich gibt eine Antwort aus dem Index Aktion und alle Elemente im Notes-Modell zurück in der Antwort wird aus- .

Darüber hinaus, wenn ich dies durch Crud.Add in einem API-Präfix implementieren, bekomme ich gültige Ergebnisse. Das heißt, versuchen zu verstehen, was ich falsch in meiner routes.php oder fügen Sie Aktion, die Ursache der Null-oder Routing-Index-Aktion verursachen könnte.

Aktion hinzufügen:

public function add() 
{ 
    $note = $this->Notes->newEntity(); 
     if ($this->request->is('post')) { 
     $note = $this->Notes->patchEntity($note, $this->request->data); 
     if ($this->Notes->save($note)) { 
      $message = 'Saved'; 
     } else { 
         $message = 'Error'; 
     } 
    } 
    $this->set('_serialize', ['note', 'message']); 
} 

routes.php:

<?php 

use Cake\Core\Plugin; 
use Cake\Routing\Router; 

Router::defaultRouteClass('DashedRoute'); 
Router::extensions(['json'], ['xml']); 

Router::prefix('api',function($routes) { 
    $routes->extensions(['json','xml']); 
    $routes->resources('Notes'); 
}); 

Router::scope('/', function ($routes) { 
     $routes->extensions(['json']); 
    $routes->resources('Notes'); 

    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); 

    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); 

    $routes->fallbacks('DashedRoute'); 
}); 

Plugin::routes(); 

Vielen Dank im Voraus.

Antwort

1

Sie setzen konnten keine Variablen für die Ansicht, andere als Serialisierungsoptionen, so dass Sie null bekommen, weil es nichts zu serialisiert, dh Sie können so etwas wie

$this->set(compact('note', 'message')); 

in Ihrer Aktion fehlen.

Und ohne die Ressourcenrouten wird eine Anfrage an /notes der Indexaktion des Notes Controllers zugeordnet, weil so Fallbackrouten verbunden sind, keine Aktion = Indexaktion.

Siehe

+0

uggh auch !! Ich kann nicht glauben, dass ich das vermisst habe. starrt mich direkt ins Gesicht, danke !! – mk97