TacticJuls
TacticJuls

Reputation: 334

JSON exception in cakephp 3

I'm doing a restfull api in cakephp... And sometime i have some throw exceptions. For example:

if (!$this->request->is('post')) {
            throw new MethodNotAllowedException("The requested resource does not support http method " . $this->request->param('_method'));
        }

My problem is when the url is /controller/action.json the response is :

{
message: "The requested resource does not support http method GET",
url: "/api/auth/users/authenticate.json",
code: 405
}

In json format, but, when my url is /controller/action. My response is HTML, i want to know if is possible to force these exceptions to be always json without putting .json in the url.

Thanks!

Upvotes: 5

Views: 1446

Answers (2)

fiblan
fiblan

Reputation: 436

You can force exceptions to be always rendered in json adding in Controller/ErrorController.php (in beforeRender)

$this->RequestHandler->renderAs($this, 'json');

Upvotes: 4

KaffineAddict
KaffineAddict

Reputation: 446

In the action do the following. As suggested in the notes.

if (!$this->request->is('post')) {
    $this->RequestHandler->renderAs($this, 'json');
    throw new MethodNotAllowedException("The requested resource does not support http method " . $this->request->param('_method'));
}

For this to work you will need the component too.

public function initialize() {
    parent::initialize();
    $this->loadComponent('RequestHandler');
}

Upvotes: 0

Related Questions