Как проверить вывод представления данных JSON в CakePHP?

Итак, я пытаюсь создать мобильное приложение для Android и использую CakePHP в качестве серверной части. Мне не понадобятся представления HTML, я буду отвечать только объектами JSON.

Я просмотрел http://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html#RequestHandlerComponent и с этим я создал это:

class LocationsController extends AppController
{
    public $helpers = array('Html', 'Form');
    public $components = array('RequestHandler');
    function index()
    {
        $locations = $this->Location->getNearest();
        $this->set(compact('locations'));
        $this->set('_serialize', array('locations'));
    }
}

и я добавил это в свой routes.php:

Router::mapResources('locations');
Router::parseExtensions('json');

Когда я запускаю это, ничего не отображается, кроме стиля макета CakePHP по умолчанию. Если я удаляю файл представления index.ctp, я получаю сообщение об ошибке, что он не может найти файл представления. Почему он все еще требует файл просмотра? Я думал, что при сериализации подход не нуждается в представлении. Я попытался посмотреть в консоли разработчика Google Chrome, и там нет ответа, содержащего объект JSON. Тем не менее, MySQL работает отлично.


person Johnathan Au    schedule 02.03.2013    source источник


Ответы (2)


Поместите $this->render(false); между

public $components = array('RequestHandler');

а также

function index()

Теперь ему больше не нужен файл index.ctp.

См. эту ссылку для получения дополнительной информации.

person JorickL    schedule 02.03.2013
comment
Ошибка: синтаксическая ошибка, неожиданное '$this' (T_VARIABLE), ожидание функции (T_FUNCTION). В любом случае, это просто сотрет весь вывод в браузере. Я не смогу проверить или увидеть свои данные JSON, если я использую render(false). - person Johnathan Au; 02.03.2013
comment
О черт. Да, ты прав. Я подозревал, что это сделало бы работу, но это с данными JSON. Тогда я не смогу вам помочь, извините. - person JorickL; 02.03.2013
comment
Тем не менее спасибо =). Я использовал public $viewClass = 'Json'; и, похоже, это помогло браузеру. Я не тестировал его на стороне Android, хотя. Я просто беспокоюсь о том, как Android будет получать данные. Я не хочу, чтобы он получал какой-либо контент html, css или javascript. - person Johnathan Au; 02.03.2013

Я просто сделал то же самое, используя REST API, так как мне нужен ответ в формате JSON. Что я сделал, так это использовал клиент расширенного отдыха Chrome. В этом я сделал запрос на свой локальный сервер, используя соответствующий метод GET, и это удалось.

нравится: GET /users/view/103.json

вы получите ответ как:

{"users":{"User":{"id":"103","username":"abc","password":"xyz",
 "email-id":"[email protected]"}}} 
person pranav    schedule 18.08.2013