我为“应用程序”表创建了一个控制器。 Web和REST界面正在运行,但我认为添加和编辑功能应该更好。
当我测试添加和编辑时,我发现需要以Web FORM格式(而不是JSON)发布数据。
我发现我需要在保存中使用“$ this-> request-> input('json_decode')”来解码JSON数据。我以为这是自动发生的。
此功能现在适用于添加(编辑类似)并显示我的json / add.ctp,因此我可以将成功记录返回给用户。
public function add() {
if ($this->request->is('post')) {
$this->Application->create();
//Is the request REST passing a JSON object?
if (preg_match('/\.json/', $this->request->here)){
//This is a REST call
$this->set('status', $this->Application->save($this->request->input('json_decode')));
} else {
//This is an interactive session
if ($this->Application->save($this->request->data)) {
$this->Session->setFlash(__('The application has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The application could not be saved. Please, try again.'));
}
}
}
}
我使用“$ this-> request-> here”查看它是否以“.json”结尾。这是处理REST调用的“正确”方法吗?
答案 0 :(得分:1)
CakePHP Book中有一整节用于此。我想它会回答你的问题:
答案 1 :(得分:0)
问题是,您的操作是否接受JSON数据&表格数据?或者只是JSON数据?
.json纯粹是为了输出您的数据,您可以发送带有.xml扩展名的JSON数据,区别在于数据被消毒后,它将以XML格式输出。
if($this->request->is('post')) {
if(empty($this->request->data)){
$data = $this->request->input('json_decode', TRUE);
} else {
$data = $this->request->data;
}
} else {
$data = $this->params['url'];
}
上面是您应该做的事情,检查数据是否来自表单,如果不是,解码JSON,如果它不是POST,则保存已包含在URL中的参数。
我并不是说上述是“正确”的方式,但这可能就是你要找的东西。