Я работаю над приложением CakePHP 2.x (v2.8). Я создал контроллер (и необходимое действие) для Rest API. Теперь я могу успешно вызвать API от Почтальона. Но из-за действия API я не могу правильно использовать метод requestAction. Данные, которые я пытаюсь опубликовать, не публикуются должным образом. Данные, которые были отправлены в API, по-прежнему отображаются в запросе-> данных метода, указанного в requestAction. Я привел пример фиктивных данных, чтобы объяснить, что происходит.
Согласно документации, я использовал «данные» в качестве ключа к массиву, который необходимо опубликовать в запрошенном действии.
Версия CakePHP 2.8, версия MySQL 5.7, версия PHP 5.4
Еще одна вещь, которую я заметил, состоит в том, что, когда тело запроса API (как вызывается из PostMan) находится в JSON (application / json), возникает эта проблема. Если в «Почтальоне» я установил тип содержимого запроса «Текст» или «Текст (текст / текст)», то он будет работать, как и ожидалось.
Ссылка, по которой я звоню через Почтальона, указана ниже:
URL: localhost / my-app / CustomerApis / create.json
Post Request Body(example):
{
'text' => 'Hello API!'
}
Тип содержимого установлен на «JSON (application / json)»
// routes.php
Router::mapResources('customer_apis');
Router::parseExtensions('json', 'xml');
// Controller/CustomerApisController.php
<?php
// API controller and action
class CustomerApisController extends AppController {
public function beforeFilter() {
$this->Auth->allow();
$this->request->data = $this->request->input("json_decode", true);
// For example, Now $this->request->data becomes: array("text" => "Hello API!")
}
public function create() {
$response = $this->requestAction(array('plugin' => null, 'controller' => 'Customers', 'action' => 'add'), array('data' => array('text' => 'Hello World!')));
/* requestAction works but data is not posted correctly */
}
}
// Controller/CustomersController.php
/* Internal Application Controller and actions */
class CustomersController extends AppController {
public function add() {
pr($this->request->data);
/* Here $this->request->data should be array('text' => 'Hello World!'), but instead it is still array("text" => "Hello API!") */
return array('Success' => true);
}
}
/*
Expected Result (when pr() in CustomersController.php):
Array(
'text' => 'Hello World'!
)
*/
/*
Actual Result:
Array(
'text' => 'Hello API'!
)
*/