Предотвращение просмотра по умолчанию с помощью RESTful API в CakePHP - PullRequest
1 голос
/ 08 декабря 2011

Я следую учебнику в книге CakePHP , в котором объясняются основы настройки веб-службы RESTful.

Пока что я обновил файл маршрутов следующим образом:

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

Я также установил пустой макет в app / layouts / json и соответствующие представления json.Я успешно получаю вывод json, когда перехожу к controller / action.json

. Мне интересно, хотя без расширения .json он пытается загрузить обычный вид.Я ищу построить чистый API только с выводом json, есть ли способ предотвратить регулярный вывод рендера вместо этого?

Ответы [ 3 ]

6 голосов
/ 26 декабря 2011

Вы можете вызвать рендеринг как JSON, если можете распознать JSON-запрос другим способом. Например, если HTTP-заголовок Accepts содержит application / json, вы можете поместить его в свой контроллер:

public function beforeFilter(){
    if ($this->request->accepts('application/json')) {
        $this->RequestHandler->renderAs($this, 'json');
    }
    parent::beforeFilter();
}

Это нотация CakePHP 2.0, но что-то подобное, вероятно, существует для CakePHP 1.2 и 1.3.

Вы также можете определить тип содержимого запроса вместо этого или также, особенно если Accepts не используется.

0 голосов
/ 02 марта 2015

вот что я сделал.

Если я знаю, что создаю только API-интерфейс json, я добавил в свой AppController.php следующее:

public function beforeFilter()
{
    if (empty($this->request->params['ext']) || $this->request->params['ext'] != "json")
    {
        $this->render(FALSE, 'maintenance'); //no view, only layout
        $this->response->send();
        $this->_stop();
    }
}

и в моем /app/Layouts/maintenance.ctp

echo __('Invalid extension');

таким образом, все запросы без расширения json будут попадать на страницу «техобслуживания», где вы можете разместить любую нужную информацию, я планирую разместить там ссылку на документацию API.

0 голосов
/ 08 декабря 2011

Что ты видишь в данный момент? Если вы использовали Bake Cake, возможно, сгенерировал для вас просмотров?

Просто удалите представления в /app/views/layout и /app/views/controllername

Если вы пытаетесь вообще предотвратить попадание запроса в контроллер, я не уверен, что вы можете просто обновить файл .htaccess, чтобы отправлять только запросы, заканчивающиеся на .json, в приложение или что-то подобное. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...