Laravel 4 Cache:: запомнить никогда не возвращает ответ с указанным идентификатором

Я использую Laravel 4 вместе с коннектором PHP Shopify. Я пытаюсь ограничить количество обращений к продуктам Shopify, кэшируя отдельные страницы продуктов, когда они нужны в первый раз.

Я сделал следующий простой маршрут в 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);
});

Это сработало, как и ожидалось, только при вызове не кеша все будущие вызовы поступали в кеш.

1 ответ

Решение

Оказывается, что ответ, возвращающийся из 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));
});
Другие вопросы по тегам