Проблема сериализации уведомлений Laravel
Я использую Laravel Notification для уведомления пользователей об определенных вещах. Все работает как положено, но в некоторых случаях я получаю следующую ошибку.
(1/1) InvalidPayloadException
Unable to JSON encode payload. Error code: 5
Когда я получил эти ошибки, я заметил, что у уведомляемых пользователей есть данные в столбце BLOB в таблице users. Я предполагаю, что по какой-то причине Laravel не может сериализовать значения, содержащиеся в столбце BLOB, и в результате я получаю ошибку, показанную выше.
На самом деле, если я изменяю значения этого столбца на NULL, процесс уведомления работает отлично. Я пытался использовать скрытые и приведенные свойства в модели User, но это не помогло.
Читая документацию, я не нашел способа изменить эту сериализацию, чтобы я мог заставить ее работать. Могу ли я изменить это поведение?
Я ценю ваши комментарии. Заранее спасибо!
1 ответ
Поскольку вы обнаружили, что JSON не принимает двоичные данные, уловка заключается в том, чтобы кодировать BLOB-объект в base64, чтобы его можно было использовать в JSON. Единственным недостатком является то, что вы должны декодировать его при извлечении JSON.
Вы можете использовать accessor
в вашей модели, чтобы иметь возможность автоматически кодировать поле Blob, когда Модель сериализуется в JSON, то есть:
// in User Model
public function getBlobAttribute($value)
{
return base64_encode($value);
}
Вам нужно только помнить, чтобы декодировать BLOB, когда вы используете его в качестве реальных двоичных данных (например, если это изображение), то есть:
$blob = base64_decode($model->blob)
Или вы можете написать метод, который получает блоб без использования accessor
:
// in User Model
public function getRawBlob()
{
$this->getOriginal('blob');
}
Надеюсь это поможет.