我創建了一條路線,旨在跟蹤電子郵件打開情況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 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消