2013-12-09 3 views
3

PHP Shopify 커넥터와 함께 Laravel 4를 사용하고 있습니다. 특정 제품 페이지가 처음 필요할 때 캐싱하여 Shopify 제품을 검색하도록 호출을 제한하려고합니다.Laravel 4 Cache :: remember는 주어진 ID로 응답을 반환하지 않습니다.

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 내가 Shopify 커넥터와 통신하는 데 쓴 PHP 라이브러리입니다 :

나는이 흐름을 테스트하는 Laravel에 다음과 같은 간단한 경로를했다. 이 호출은 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

있습니다. 원래 나는이 세 가지 방법으로 간단한 테스트를하고 있었지만 동일한 효과가있었습니다. 나는 그 대신 하나의 방법을 사용하여 프로세스를 단순화 할 수 있음을 깨달았다. –

답변

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