Laravel 通知序列化问题
Laravel notification serialization problem
我正在使用 Laravel 通知来通知用户某些事情。一切都按预期工作,但在某些情况下我会遇到下一个错误。
(1/1) InvalidPayloadException
Unable to JSON encode payload. Error code: 5
当我收到这些错误时,我注意到的是,被通知的用户在用户 table 的 BLOB 列中有数据。我的猜测是由于某种原因 Laravel 无法序列化 BLOB 列中包含的值,因此我得到了上面显示的错误。
实际上,如果我将该列的值更改为 NULL,通知过程将完美运行。我尝试在 User 模型中使用 hidden 和 cast 属性,但没有用。
阅读文档后,我还没有找到更改序列化的方法,因此我可以让它工作。有什么办法可以改变这种行为吗?
感谢您的评论。提前致谢!
正如您自己发现的那样 JSON 不接受二进制数据,这里的技巧是对 BLOB 进行编码到 base64 所以它可以在 JSON 中使用,唯一的缺点是当你检索 JSON。
您可以在模型上使用 accessor
,以便在 Model 为在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');
}
希望对您有所帮助。
我正在使用 Laravel 通知来通知用户某些事情。一切都按预期工作,但在某些情况下我会遇到下一个错误。
(1/1) InvalidPayloadException
Unable to JSON encode payload. Error code: 5
当我收到这些错误时,我注意到的是,被通知的用户在用户 table 的 BLOB 列中有数据。我的猜测是由于某种原因 Laravel 无法序列化 BLOB 列中包含的值,因此我得到了上面显示的错误。
实际上,如果我将该列的值更改为 NULL,通知过程将完美运行。我尝试在 User 模型中使用 hidden 和 cast 属性,但没有用。
阅读文档后,我还没有找到更改序列化的方法,因此我可以让它工作。有什么办法可以改变这种行为吗?
感谢您的评论。提前致谢!
正如您自己发现的那样 JSON 不接受二进制数据,这里的技巧是对 BLOB 进行编码到 base64 所以它可以在 JSON 中使用,唯一的缺点是当你检索 JSON。
您可以在模型上使用 accessor
,以便在 Model 为在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');
}
希望对您有所帮助。