我有同樣的情況,但現在我找到了解決方案。現在我可以把請求的URL沒有.json,也可以得到Json數據。
在應用程序控制器中添加將處理您的響應的網絡響應。
use Cake \ Network \ Response;
之後,你需要轉換Json的輸入陣列,所以把這個getJsonInput()
功能在你的AppController
,並在控制器中調用它initialize()
public function getJsonInput() {
$data = file_get_contents("php://input");
$this->data = (isset($data) && $data != '') ? json_decode($data, true) : array();
}
現在,你有$this->data
所有發佈數據。所以你可以訪問所有的輸入。 下面是一個例子:
class UsersController extends AppController {
public function index() {
if ($this->request->is('post')) {
//pr($this->data); //here is your all inputs
$this->message = 'success';
$this->status = true;
}
$this->respond();
}
}
在你的函數結束
現在你需要調用respond()
這是在AppController
public function respond() {
$this->response->type('json'); // this will convert your response to json
$this->response->body([
'status' => $this->status,
'code' => $this->code,
'responseData' => $this->responseData,
'message'=> $this->message,
'errors'=> $this->errors,
]); // Set your response in body
$this->response->send(); // It will send your response
$this->response->stop(); // At the end stop the response
}
定義定義所有變量在AppController
作爲
public $status = false;
public $message = '';
public $responseData = array();
public $code = 200;
public $errors = '';
還有一件事要做的是:
在Response.php (/vendor/cakephp/cakephp/src/Network/Response.php)
您需要編輯一行586 echo $content;
至echo json_encode($content);
的_sendContent()
函數。
就是這樣。現在您可以將請求網址設置爲 domain_name/project_name/users/index
。
嘗試使用'Router :: parseExtensions('json');'而不是'Router :: extensions('json');'? – Maraboc
但是,[3-0-migration-guide says](http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html)Router :: parseExtensions()已被刪除。使用Cake \ Routing \ Router :: extensions()代替。該方法必須在連接路由之前調用。它不會修改現有的路線。 –
@Maraboc任何我不想爲我的網址添加擴展名的方法。我想把沒有.json擴展名的JSON響應。 –