【问题标题】:Laravel notification serialization problemLaravel 通知序列化问题
【发布时间】:2019-07-23 13:39:57
【问题描述】:

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

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

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

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

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

感谢您的 cmets。提前致谢!

【问题讨论】:

    标签: laravel laravel-notification


    【解决方案1】:

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

    您可以在您的模型上使用accessor,以便在 Model序列化 strong>JSON,即:

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

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

    $blob = base64_decode($model->blob)
    

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

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

    希望对您有所帮助。

    【讨论】:

    • 如果您觉得我的回答有用,请接受并点赞。
    • 完成。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2017-02-25
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多