0

parseExtension我在我的 cakephp 2.3.0 中设置了for json。没有错误显示。有用?

我该如何测试?

在 RoR 中很容易通过以下方式进行测试

https://mydomain.de/view/4.json

它如何在 cakephp 上运行?

我的 View-Action 是这样的。

 public function view($id = null) {
            if (!$this->Atla->exists($id)) {
                    throw new NotFoundException(__('Invalid atla'));
            }
            $options = array('conditions' => array('Atla.' . $this->Atla->primaryKey => $id));
            $this->set('atla', $this->Atla->find('first', $options));

            $this->Atla->id = $id;
            $result = $this->Atla->read();
            $this->response->type('json');
            $this->response->body(json_encode($result));
            return $this->response;   
            $this->set(compact('atlas'));

    }

为什么我总是收到一个 json 请求?

4

2 回答 2

1

如果你使用_serialize键 cakephp 可以自动为你创建 json 和 xml 视图。我通常使用以下内容来创建 json 或 xml 视图:

public function view() {
  // data I want to display
  $record1 = $this->ModelName->find('first', ...);
  $this->set('record1', $record1);

  $record2 = $this->ModelName->find('first', ...);
  $this->set('record2', $record2);


  // option 1: serialize the hard way 
  $this->set('_serialize', array('record1', 'record2'));

  // option 2: serialize the easy way
  $this->set('_serialize', array_keys($this->viewVars));
}

PS:你的return语句后面的代码永远不会被执行。

于 2013-02-09T15:05:07.147 回答
0

您将创建视图

应用程序/视图/Atlas/json/view.ctp

这是用于 .json 请求的视图。没有.json 的请求将使用常规视图文件:

app/View/Atlas/view.ctp

这里有更多关于创建/使用 JSON 和 XML 视图的信息:http: //book.cakephp.org/2.0/en/views/json-and-xml-views.html#using-a-data-view-with-view -文件

从该页面 view.ctp 可能包含类似的内容;

// View code - app/View/Posts/json/index.ctp
foreach ($posts as &$post) {
    unset($post['Post']['generated_html']);
}
echo json_encode(compact('posts', 'comments'));

但是,这实际上取决于您要实现的目标。如果您只对 JSON 响应使用“Atlas/view”操作,而根本不使用 HTML,则有时您可以在 Controller 中生成响应体。与 MVC 约定不太“符合”,但它使您免于创建仅做的视图echo json_encode($data);;)

public function view($id)
{
    $this->MyModel->id = $id;
    $result = $this->MyModel->read();

    $this->response->type('json');
    $this->response->body(json_encode($result));

    //Return reponse object to prevent controller from trying to render a view
    return $this->response;
}

如果您确实想同时使用“HTML”和“JSON”,具体取决于请求(带/不带 .json 扩展名),您应该有两个视图文件;1 表示 JSON,1 表示 HTML;

// This view will be used for your JSON requests
app/View/Atlas/json/view.ctp

// This view will be used for non-JSON (html) requests:
app/View/Atlas/view.ctp

在 json-view 中,使用 json_encode(.....) 输出数据;在 'normal'/html 视图中,只输出普通数据

在您的控制器中,将数据设置为正常

public function view($id = null) {
        $this->Atla->id = $id;
        if (!$this->Atla->exists()) {
                throw new NotFoundException(__('Invalid atla'));
        }
        $this->set('atla', $this->Atla->read());

}
于 2013-02-09T13:37:49.103 回答