Implement interface to serialize exceptions to JSON-API format

Related to #118
This commit is contained in:
Franz Liedke 2015-09-08 22:35:39 +02:00
parent 334d598d56
commit 774505299c
3 changed files with 74 additions and 2 deletions

View File

@ -0,0 +1,29 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Core\Exceptions;
interface JsonApiSerializable
{
/**
* Return the HTTP status code to be used for this exception.
*
* @return int
*/
public function getStatusCode();
/**
* Return an array of errors, formatted as JSON-API error objects.
*
* @see http://jsonapi.org/format/#error-objects
* @return array
*/
public function getErrors();
}

View File

@ -12,6 +12,26 @@ namespace Flarum\Core\Exceptions;
use Exception;
class PermissionDeniedException extends Exception
class PermissionDeniedException extends Exception implements JsonApiSerializable
{
/**
* Return the HTTP status code to be used for this exception.
*
* @return int
*/
public function getStatusCode()
{
return 401;
}
/**
* Return an array of errors, formatted as JSON-API error objects.
*
* @see http://jsonapi.org/format/#error-objects
* @return array
*/
public function getErrors()
{
return [];
}
}

View File

@ -12,7 +12,7 @@ namespace Flarum\Core\Exceptions;
use Exception;
class ValidationException extends Exception
class ValidationException extends Exception implements JsonApiSerializable
{
protected $messages;
@ -25,4 +25,27 @@ class ValidationException extends Exception
{
return $this->messages;
}
/**
* Return the HTTP status code to be used for this exception.
*
* @return int
*/
public function getStatusCode()
{
return 422;
}
/**
* Return an array of errors, formatted as JSON-API error objects.
*
* @see http://jsonapi.org/format/#error-objects
* @return array
*/
public function getErrors()
{
return array_map(function ($path, $detail) {
return compact('path', 'detail');
}, array_keys($this->messages), $this->messages);
}
}