2016-11-15 89 views
0

我想通過JSON到我的控制器的添加()行動,但我得到的響應是從Index()行動或「空」的響應取決於條目在我的routes.php(如下所示)。CakePHP 3添加行動路線索引或返回空

我使用Firefox插件RESTClient實現測試/ JSON傳遞到我的行動:

方法:POST

網址:http://MyApp/notes.json(我的理解是基於cakephp docs這應該叫添加行爲)

JSON:

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

當我在我的routes.php文件下面,響應爲「null」

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

從此範圍中刪除$routes->resources('Notes');返回從索引操作的響應,並在Notes模型中的所有項目在響應返回。

此外,當我通過Crud.Add實現這個api前綴時,我得到了有效的結果。這就是說試圖瞭解我在我的routes.php中有什麼不正確或添加可能導致null或路由到索引操作的操作。

添加操作:

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(); 

在此先感謝。

回答

1

您沒有設置的任何視圖變量,比序列化選項等,讓您得到null因爲沒有什麼可序列化,也就是你缺少像

$this->set(compact('note', 'message')); 
在你的行動

並且沒有資源路由,/notes的請求映射到Notes控制器的索引操作,因爲這是回退路由的連接方式,沒有操作=索引操作。

+0

uggh見!我不能相信我錯過了這一點。凝視着我的臉,謝謝你! – mk97