Laravel通知序列化问题

问题描述 投票:1回答:1

我正在使用Laravel Notification来通知用户某些事情。一切都按预期工作,但在某些情况下,我得到下一个错误。

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

当我收到这些错误时,我注意到的事情是被通知的用户在users表的BLOB列中有数据。我的猜测是,由于某种原因,Laravel无法序列化BLOB列中包含的值,因此我得到上面显示的错误。

实际上,如果我将该列的值更改为NULL,则通知过程将完美运行。我尝试在User模型中使用隐藏和强制转换属性,但它没有帮助。

阅读文档我没有找到改变序列化的方法,所以我可以使它工作。有什么我可以改变这种行为吗?

感谢您的评论。提前致谢!

laravel laravel-notification
1个回答
0
投票

正如您自己发现的那样,JSON不接受二进制数据,这里的技巧是将BLOB编码为base64,因此可以在JSON中使用,唯一的缺点是在检索JSON时必须对其进行解码。

您可以在模型上使用accessor,以便在使用JSON序列化模型时自动编码Blob字段,即:

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

当您将BLOB用作实际二进制数据时(例如,如果它是图像),您只需要记住解码BLOB,即:

$blob = base64_decode($model->blob)

或者你可以编写一个方法来检索blob而不使用accessor

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

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.