Вот такая ситуация:
$errors = $this->validator->validate($request);
if (\count($errors) > 0) {
$errorBag = ErrorMessageHelper::generateErrorMessage($errors);
throw new CustomException(json_encode($errorBag), Response::HTTP_INTERNAL_SERVER_ERROR);
}
Здесь $errorBag возвращает массив.
Когда я выбрасываю это исключение: мой ответ выглядит примерно так:
"error":{"code":500,"message":"{\"postalCode\":\"This value should have exactly 7 characters.\"}"}
Обратите внимание на сообщение выше, закодированное в json.
Кто-нибудь знает, как правильно его бросить (сообщение должно быть правильным json-объектом)
Я пытался переопределить CustomException, но он не работает и возвращает пустой ответ.
Любые идеи ?
json_encode() создает строку JSON. JSON не всегда доступен для использования с PHP. Вы используете его для AJAXing обратно в JavaScript.
@BrianPatterson Нет. Он преобразует его в массив, и исключение выдаст ошибку
@PHPglue, а что, если я хочу отправить его в виде аккуратной строки JSON?
Мне уже хорошо.
Что возвращает json_last_error?
Попробуйте json_decode ($ errorBag [0])
json_last_error возвращает то же сообщение об ошибке. Это похоже на стопку предыдущих сообщений об ошибках, которые я пробовал.
Который из? JSON_ERROR_NONE => 'Ошибка не произошла', JSON_ERROR_DEPTH => 'Превышена максимальная глубина стека', JSON_ERROR_STATE_MISMATCH => 'Неверный или неверный формат JSON', JSON_ERROR_CTRL_CHAR => 'Ошибка управляющего символа, возможно, неверно закодирован. Синтаксическая ошибка ', JSON_ERROR_UTF8 =>'
Вы в конечном итоге это выяснили?
Я считаю, что JSON хорошо сформирован и его можно использовать в дальнейшем.






Сможете ли вы легко интегрировать этот класс? `
class JsonHandler {
protected static $_messages = array(
JSON_ERROR_NONE => 'No error has occurred',
JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',
JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
JSON_ERROR_SYNTAX => 'Syntax error',
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded'
);
public static function encode($value, $options = 0) {
$result = json_encode($value, $options);
if ($result) {
return $result;
}
throw new RuntimeException(static::$_messages[json_last_error()]);
}
public static function decode($json, $assoc = false) {
$result = json_decode($json, $assoc);
if ($result) {
return $result;
}
throw new RuntimeException(static::$_messages[json_last_error()]);
}
}
`
Это очевидно. Я получаю эту ошибку: "error": {"code": 0, "message": "Warning: json_decode () ожидает, что параметр 1 будет строкой, заданным массивом"} Поскольку $ errorBag является массивом
Это умно. Что, если нам понадобится вся информация из массива?
Json_decode? php.net/manual/en/function.json-decode.php