arg*_*iwi 4 php api json silverstripe
我正在开发Silverstripe项目,我希望有一种简单的方法可以将CMS生成的页面(或页面的子类型)的内容呈现为JSON.
理想情况下,我想在路径的末尾追加"/ json",或通过post(json = true)发送参数并获得JSON格式的响应.
我尝试将一个动作添加到我的CustomPage_Controller类,如下所示:
public static $allowed_actions = array('json');
public function json(SS_HTTPRequest $request) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何做到这一点:
Sha*_*lja 10
你走在正确的轨道上.你只需在你的json行动中做这样的事情:
public function json(SS_HTTPRequest $request) {
$f = new JSONDataFormatter();
$this->response->addHeader('Content-Type', 'application/json');
return $f->convertDataObject($this->dataRecord);
}
Run Code Online (Sandbox Code Playgroud)
或者对于特定字段,您可以执行此操作:
public function json(SS_HTTPRequest $request) {
// Encode specific fields
$data = array();
$data['ID'] = $this->dataRecord->ID;
$data['Title'] = $this->dataRecord->Title;
$data['Content'] = $this->dataRecord->Content;
$this->response->addHeader('Content-Type', 'application/json');
return json_encode($data);
}
Run Code Online (Sandbox Code Playgroud)
如果您将上面的内容放在Page.php文件中的控制器中,并且所有其他页面都扩展了,Page_Controller那么您应该可以转到http://mydomain/xxxx/json并获取任何页面的JSON输出.