Silverstripe:CMS页面为JSON?

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)

但我无法弄清楚如何做到这一点:

  • 我应该使用什么URL /路由?
  • 如何获取页面内容?

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输出.