Проблема сериализации уведомлений Laravel - PullRequest
0 голосов
/ 01 марта 2019

Я использую Laravel Notification для уведомления пользователей об определенных вещах.Все работает, как и ожидалось, но есть определенные случаи, когда я получаю следующую ошибку.

(1/1) InvalidPayloadException
Unable to JSON encode payload. Error code: 5

Когда я получаю эти ошибки, я заметил, что у уведомляемых пользователей есть данные в столбце BLOB пользователей.Таблица.Я предполагаю, что по какой-то причине Laravel не может сериализовать значения, содержащиеся в столбце BLOB, и в результате я получаю ошибку, показанную выше.

На самом деле, если я изменю значения этого столбцаNULL процесс уведомления работает отлично.Я пытался использовать свойства hidden и cast в модели User, но это не помогло.

Читая документацию, я не нашел способа изменить эту сериализацию, чтобы я мог заставить ее работать.Могу ли я изменить это поведение?

Я ценю ваши комментарии.Заранее спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

Как вы сами выяснили JSON не принимает двоичные данные, уловка заключается в том, чтобы закодировать BLOB в base64 , чтобы его можно было использовать в JSON , единственным недостатком является то, что вы должны декодировать его при извлечении JSON .

Вы можете использовать accessor на своей модели, чтобы иметь возможность автоматически кодировать поле Blob , когда Модель имеет сериализованный in JSON , то есть:

// in User Model
public function getBlobAttribute($value)
{
    return base64_encode($value);
}

Вам нужно только запомнить декодировать BLOB , когда вы используете его в качестве реальных двоичных данных (например, если это изображение), то есть:

$blob = base64_decode($model->blob)

Или вы можете написать метод, который извлекает BLOB-объект без , используя accessor:

// in User Model
public function getRawBlob()
{
    $this->getOriginal('blob');
}

Надеюсь, эта помощь.

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