2016-05-14 3 views
0

У меня есть это очень простую функцию в Laravel,Неопределенная переменная при вызове Fn

public function getImage($slug){ 

    // This return an error 
    $cached = Cache::remember('Test', 10, function(){ 
     $images = $this->allImages(); 

     // Undefined var $slug 
     return file_get_contents($images[$slug]['image-url']); 
    }); 

    // This works 
    // $images = $this->allImages(); 
    // $cached = file_get_contents($images[$slug]['image-url']); 

    $headers = [ 
     'Content-Type'  => 'image/jpeg', 
     'Cache-Control'  => 'max-age=600' 
    ]; 

    return Response::make($cached, 200, $headers); 
} 

Это может быть глупый вопрос, но я не использовал PHP в течение длительного времени, и обойти это почему $ тихоход не определено?

ответ

3

При создании анонимной функции/закрытия, которую вы затем переходите на Cache :: remember(), вам необходимо явно указать все переменные из родительской области, которые должны быть доступны в области этой функции.

использование оператор используется для этого - следующий код должен работать:

$cached = Cache::remember('Test', 10, function() use($slug) { 
    $images = $this->allImages(); 

    // Undefined var $slug 
    return file_get_contents($images[$slug]['image-url']); 
}); 
+0

Бог благословит вас, сэр. – Jack

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