调用fn时未定义的变量

时间:2016-05-14 09:27:03

标签: php laravel laravel-5

我在Laravel中有这个非常简单的功能,

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了,为什么$ slug未定义? -

1 个答案:

答案 0 :(得分:3)

当您创建一个稍后传递给 Cache :: remember()的匿名函数/闭包时,您需要明确地列出该函数中应该可用的父作用域中的所有变量&#39 ;范围。

使用语句用于此 - 以下代码应该起作用:

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

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