Как мне выбросить это исключение PHP, чтобы оно возвращало массив?

Вот такая ситуация:

$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_decode? php.net/manual/en/function.json-decode.php

Brian Patterson 16.03.2018 06:18
json_encode() создает строку JSON. JSON не всегда доступен для использования с PHP. Вы используете его для AJAXing обратно в JavaScript.
StackSlave 16.03.2018 06:20

@BrianPatterson Нет. Он преобразует его в массив, и исключение выдаст ошибку

Suraj Gusain 16.03.2018 06:21

@PHPglue, а что, если я хочу отправить его в виде аккуратной строки JSON?

Suraj Gusain 16.03.2018 06:23

Мне уже хорошо.

StackSlave 16.03.2018 06:26

Что возвращает json_last_error?

Brian Patterson 16.03.2018 06:40

Попробуйте json_decode ($ errorBag [0])

Brian Patterson 16.03.2018 06:44

json_last_error возвращает то же сообщение об ошибке. Это похоже на стопку предыдущих сообщений об ошибках, которые я пробовал.

Suraj Gusain 16.03.2018 06:48

Который из? JSON_ERROR_NONE => 'Ошибка не произошла', JSON_ERROR_DEPTH => 'Превышена максимальная глубина стека', JSON_ERROR_STATE_MISMATCH => 'Неверный или неверный формат JSON', JSON_ERROR_CTRL_CHAR => 'Ошибка управляющего символа, возможно, неверно закодирован. Синтаксическая ошибка ', JSON_ERROR_UTF8 =>'

Brian Patterson 16.03.2018 06:52

Вы в конечном итоге это выяснили?

Brian Patterson 17.03.2018 00:42

Я считаю, что JSON хорошо сформирован и его можно использовать в дальнейшем.

Nevermore 17.03.2018 07:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
11
96
1

Ответы 1

Сможете ли вы легко интегрировать этот класс? `

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 является массивом

Suraj Gusain 16.03.2018 06:31

Это умно. Что, если нам понадобится вся информация из массива?

Suraj Gusain 16.03.2018 06:45

Другие вопросы по теме