2017-10-24 7 views
1

私はこのような機能を持っている:Laravel Cache、内部変数は未定義ですか?

public function entity($entity_id, Request $request) 
{ 
    $expiresAt = Carbon::now()->addMinutes(10); 
    $entity = Cache::remember('entities', $expiresAt, function() { 
     return Entity::where('id', $entity_id) 
      ->with('address') 
      ->with('_geoloc') 
      ->first(); 
    }); 

は、しかし、これは私が$ expiresAt後のDD($ ENTITY_ID)を行うときにしかし、それは私が戻ってIDを取得するように定義され、$のENTITY_IDが定義されていない、というエラーを返します。 、idが必要な場合はurlから来ます。

答えて

3

あなたが匿名関数を可能にしなければなりません変数をスコープの外にキャプチャします。 $entity_idその範囲外です。これがphpがクロージャを表現する方法です。 use()を使用すると動作します。

public function entity($entity_id, Request $request) 
{ 
$expiresAt = Carbon::now()->addMinutes(10); 
$entity = Cache::remember('entities', $expiresAt, function() use($entity_id) { 
    return Entity::where('id', $entity_id) 
     ->with('address') 
     ->with('_geoloc') 
     ->first(); 
}); 
+0

ありがとうございます、これを受け入れるでしょう、もう少し詳しく説明してください。 –

+0

ありがとうございます:)私はそれを感謝します – Dean

1

あなたは、その変数は、以下の例に示すように、それは使用のキーワードを使用して渡される必要があるAnnonymousの機能の範囲外であるため、use($entity_id)を追加する必要があります。

public function entity($entity_id, Request $request) 
{ 
    $expiresAt = Carbon::now()->addMinutes(10); 
    $entity = Cache::remember('entities', $expiresAt, function()use($entity_id) { 
     return Entity::where('id', $entity_id) 
      ->with('address') 
      ->with('_geoloc') 
      ->first(); 
    });