2016-01-20 11 views
5

Il seguente ovviamente determina una variabile non definita.Laravel dove ha passato argomenti addizionali per funzionare

public function show($locale, $slug) 
{ 
$article = Article::whereHas('translations', function ($query) { 
$query->where('locale', 'en') 
    ->where('slug', $slug); 
})->first(); 

    return $article; 
} 

Cercando di fornire la funzione con la variabile $ slug:

public function show($locale, $slug) 
{ 
    $article = Article::whereHas('translations', function ($query, $slug) { 
     $query->where('locale', 'en') 
     ->where('slug', $slug); 
    })->first(); 

    return $article; 
} 

risultati in

Missing argument 2 for App\Http\Controllers\ArticlesController::App\Http\Controllers\{closure}() 

come si può permettere il funtion di avere accesso a $ slug? Ora questo è probabilmente qualcosa di semplice ma non riesco a trovare quello che ho bisogno di cercare.

risposta

27

bisogna usare use per passare variabili (nel tuo caso, $slug) nella chiusura (questo è chiamato variable inheriting):

public function show($locale, $slug) 
{ 
     $article = Article::whereHas('translations', function ($query) use ($slug) { 
     $query->where('locale', 'en') //        ^^^ HERE 
       ->where('slug', $slug); 
    })->first(); 

    return $article; 
} 

Se, in futuro, vuole passare $locale in lungo con , basta virgole separano:

Article::whereHas('translations', function ($query) use ($slug, $locale) { /* ... */ }); 
+0

Sapevo che sarebbe stato qualcosa di semplice. Grazie – Philwn

+0

Nessun problema, amico. Buona programmazione! :-) – Dencker

2

è necessario ereditare la variabile dal campo di applicazione genitore:

public function show($locale, $slug) { 

    $article = Article::whereHas('translations', function ($query, $slug) use ($slug){ 
     $query->where('locale', 'en') 
     ->where('slug', $slug); 
    })->first(); 

    return $article; 
} 

Le chiusure possono anche ereditare variabili dall'ambito genitore. Qualsiasi variabile di questo tipo deve essere passata al costrutto del linguaggio di utilizzo.

Da qui: http://php.net/manual/en/functions.anonymous.php

Problemi correlati