2016-05-14 52 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