CakePHP 2.1 JsonView - PullRequest
       5

CakePHP 2.1 JsonView

5 голосов
/ 24 марта 2012

Я использую новый CakePHP 2.1 и хотел бы использовать JsonView, чтобы заставить мой контроллер отвечать на запрос AJAX, созданный jQuery на стороне клиента.

Однако, это должно быть сделано автоматически с JsonView в соответствии с документацией.

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

Я добавил эту строку в свой файл rout.php

Router::parseExtensions('json');

И в моем контроллере у меня есть

$this->RequestHandler->setContent('json', 'application/json' ); 
$bookings = $this->Bookings->find('all');

$this->set('bookings', $bookings);  
$this->set('_serialize', 'bookings');

Тогда представление должно быть устаревшим, но когда я это называю, оно все равно обслуживает страницу, которая указывает на отсутствующее представление.

Ответы [ 3 ]

5 голосов
/ 25 марта 2012

Заканчивается ли URL, который вы вызываете, на .json?

2 голосов
/ 14 июля 2012

У меня были некоторые проблемы с Cake, когда я хотел явно установить представление json.Представление XML по умолчанию загружается нормально, но не json.

В своей функции API я сделал следующее:

    if($this->RequestHandler->ext == 'json') {
        $this->autoRender = false;
        echo json_encode($results);
    } else if($this->RequestHandler->ext == 'xml') {
        $this->set(array(
            'results' => $results,
            '_serialize' => array('results')
        ));
    }
0 голосов
/ 24 марта 2012

Вы добавили "RequestHandlerComponent" в список компонентов вашего контроллера?

Я пошел другим путем и создал представление JSON: /app/View/Model/json/view.ctp

<?php
echo json_encode(array(
'success' => TRUE
));

И в моем контроллере я использовал:

$this->viewClass = 'Json';

С уважением, Джеймс

...