Как разместить данные в методе requestAction контроллера CakePHP при вызове через действие API? - PullRequest
0 голосов
/ 17 мая 2019

Я работаю над приложением 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'!
         )
*/
...