我创建了一条路线,旨在跟踪电子邮件打开情况Route::get('/stats/{token}/pixel-email-read.png', 'StatController@trackEmailRead') ->name('stats.pixel-email-read');我在电子邮件建设中使用它,如下<img src="{{ route('stats.pixel-email-read', [ 'token' => $order->token ] ) }}">实际代码正在生成 1x1 透明 pingpublic function trackEmailRead(Request $request, string $token) { header('Content-Type: image/png'); echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII='); }它适用于电子邮件,但不适用于浏览器。如果我打开浏览器我会得到这个我希望看到浏览器以图像形式打开我的链接。我究竟做错了什么?
2 回答
慕虎7371278
TA贡献1802条经验 获得超4个赞
如果通往图像的路由和其他内容正确,请使用response()
对象助手并加载 base64 图像,最后附加内容类型。
想法是这样的:
public function trackEmailRead(Request $request, string $token){ $base64_img = base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII='); return response($base64_img)->header('Content-type', 'image/png'); }
HUH函数
TA贡献1836条经验 获得超4个赞
我将凯文的答案标记为最佳答案,但我添加自己的问题只是为了将来的替代想法。
我提供了一个文件而不是回显,就像 mrhn 的评论所建议的那样
public function trackEmailRead(Request $request, string $token)
{
$order = Order::where(['token' => $token])->first();
if ($order && !$order->email_read_at) {
$order->update([
'email_read_at' => now()
]);
}
return response()->file(public_path() . '/images/pixel.png');
}
是的,我知道 !!您认为我可以在 whereNull 条件下使用“email_read_at”进行直接更新,但是......在实际代码中,在查询和 if 之间,还有一些其他业务逻辑......
- 2 回答
- 0 关注
- 104 浏览
添加回答
举报
0/150
提交
取消