2013-12-09 45 views
3

我正在使用Laravel 4與PHP Shopify連接器一起使用。我試圖限制通過在首次需要時緩存特定產品頁面來檢索Shopify產品的呼叫。Laravel 4 Cache :: remember永遠不會返回給定ID的響應

我提出了以下簡單路線在Laravel測試此流程:

Route::get('product/{id}', function($id) 
{ 
    $value = Cache::remember($id, 10, function() use ($id) 
    { 
     echo('Getting this from Shopify'); 
     $shopify = new ShopifyLib; 
     return $shopify->getShopifyProduct($id); 
    }); 

    var_dump($value); 
}); 

ShopifyLib是一個PHP庫我寫與Shopify連接器進行通信。該調用會以正確的時間正確返回JSON格式的產品頁面。問題在於該調用總是在Shopify外部進行,而不是從緩存中檢索。我使用與以下項數據庫高速緩存

被保存:

key : laravel172989477 
value : eyJpdiI6Imw4aUwzNHN4eExwdElPWFZKXC9hdFpVRjc4ZG5pK1dYMTlJVm44a1doKzlvPSIsInZhbHVlIjoieVJ6N2J6Q1A3SGNsWG1xWFJKTUdVak5FSEtHWDZKQkd2Y2x0ZEI2dHlvcz0iLCJtYWMiOiJhNWU0OGUxOTkyNWE2NTRhNTY1ZTNhMjRlOWNhNzRjNGI1ZDIyY2YzNGM3NTVjOThhMDUyYjllZmI1OTJiZmE1In0= 
expiration : 1386616552 

的$ ID不會改變,所以我認爲這個條目應該每次都被退回。

我試圖用一個簡單的例子:

Route::get('product/{id}', function($id) 
{ 
    $value = Cache::remember('test', 5, function() 
    { 
     echo('Not getting this from the cache!'); 
     return 'example'; 
    }); 

    var_dump($value); 
}); 

這和預期一樣只調用非高速緩存中一次與未來的所有呼叫要緩存。

+0

您是否嘗試過使用標準'has','get'和'put'方法? – SamV

+0

我有。最初我正在用這3種方法做一個簡單的測試,但它具有相同的效果。然後我意識到我可以用一種方法來簡化流程。 –

回答

2

事實證明,從Shopify返回的響應實際上並不像我最初懷疑的那樣是JSON。這顯然是一個陣列。通過對響應進行JSON編碼,緩存工作正常。

Route::get('product/{id}', function($id) 
{ 
    $value = Cache::remember("product_$id", 10, function() use ($id) 
    { 
     echo('Getting this from Shopify'); 
     $shopify = new ShopifyLib; 
     return json_encode($shopify->getShopifyProduct($id)); 
    }); 

    var_dump(json_decode($value)); 
}); 
+0

這幫了我。看起來Cache :: remember()不能存儲數組。 – phirschybar

相關問題