2016-09-28 5 views
5

Laravel документы дают пример:как передать переменную Cache :: помнить функцию

$value = Cache::remember('users', $minutes, function() { 
    return DB::table('users')->get(); 
}); 

В моем случае у меня есть

public function thumb($hash, $extension) 
{ 
    Cache::remember('thumb-'.$hash, 15, function() { 
     $image = Image::where('hash', $hash)->first(); 
    }); 

Если я бегу, что я получаю ErrorException in ImageController.php line 69: Undefined variable: hash. Я попытался передать $ хеш функционировать следующим образом:

Cache::remember('thumb-'.$hash, 15, function($hash) 

, но затем получил другую ошибку, как показано ниже:

Отсутствует аргумент 1 для App \ Http \ Контроллеры \ ImageController :: App \ Http \ Контроллеры {закрытие}(), называемый в C: \ XAMPP \ HTDOCS \ imagesharing \ поставщика \ Laravel \ рамки \ SRC \ Осветите \ Cache \ Repository.php на линии 316 и определены

Как передать аргумент, так что я можете использовать его в моем запросе?

ответ

12

Вам необходимо передать его, используя use.

Cache::remember('thumb-'.$hash, 15, function() use ($hash) { 
    $image = Image::where('hash', $hash)->first(); 
}); 
+1

Чтобы добавить немного больше деталей - это не проблема с laravel, так как функции закрытия/анонимности работают в PHP. См. [PHP Docs] (http://php.net/manual/en/functions.anonymous.php) –

+0

спасибо, что сделал трюк –

+0

Я решил использовать вечно вместо того, чтобы помнить, и этот кэш :: навсегда (' thumb-'. $ hash, function() use ($ hash) дает мне исключение в строке FileStore.php 102: Сериализация' Closure 'недопустима, нельзя ли использовать закрытие с вечно? –

Смежные вопросы