3

私は、Laravel 4 フレームワークを使用して最初のアプリケーションの 1 つを開発しています (ちなみに、Laravel 4 フレームワークを使用して設計するのは楽しいことです)。1 つのコンポーネントについては、外部サーバーを照会するための AJAX 要求があります。問題は、これらの応答が成功した場合にのみ、これらの応答を一定期間キャッシュしたいということです。

Laravel には Cache::remember() 関数がありますが、問題は、キャッシュが保存されない「失敗」モードがないように見えることです (少なくとも、ドキュメントには記載されていません)。

たとえば、次の簡略化された関数を考えてみましょう。

try {
    $server->query();
} catch (Exception $e) {
    return Response::json('error', 400);
}

this の出力で Cache::remember を使用したいのですが、例外がスローされなかった場合に限ります。これを行うためのエレガントではない方法をいくつか考えることはできますが、Laravel はそのような... 雄弁な... フレームワークであり、より良い方法があると思います。何か助けはありますか?ありがとう!

4

3 に答える 3

3

これは私のために働いたものです:

if (Cache::has($key)) {
    $data = Cache::get($key);
} else {
    try {
        $data = longQueryOrProcess($key);
        Cache::forever($key, $data); // only stored when no error
    } catch (Exception $e) {
        // deal with error, nothing cached
    }
}

Cache::put($key, $data, $minutes);もちろん、代わりに使用することもできますforever

于 2014-09-09T15:57:27.930 に答える
0

最後の適切な値を に保存することで、この問題を回避していますCache::forever()。キャッシュ更新コールバックでエラーが発生した場合は、フォーエバー キーから最後の値を取得するだけです。成功した場合は、永久キーを更新します。

于 2014-03-07T10:47:46.310 に答える