Php Laravel,其中向函数传递附加参数
以下明显导致变量未定义Php Laravel,其中向函数传递附加参数,php,laravel,arguments,closures,Php,Laravel,Arguments,Closures,以下明显导致变量未定义 public function show($locale, $slug) { $article = Article::whereHas('translations', function ($query) { $query->where('locale', 'en') ->where('slug', $slug); })->first(); return $article; } 尝试向函数提供$slug变量: public functi
public function show($locale, $slug)
{
$article = Article::whereHas('translations', function ($query) {
$query->where('locale', 'en')
->where('slug', $slug);
})->first();
return $article;
}
尝试向函数提供$slug变量:
public function show($locale, $slug)
{
$article = Article::whereHas('translations', function ($query, $slug) {
$query->where('locale', 'en')
->where('slug', $slug);
})->first();
return $article;
}
导致
Missing argument 2 for App\Http\Controllers\ArticlesController::App\Http\Controllers\{closure}()
您如何允许函数访问$slug?
现在这可能很简单,但我找不到需要搜索的内容。您必须使用
use
将变量(在您的情况下,$slug
)传递到闭包中(称为):
如果将来要将$locale
与它一起传递,只需用逗号分隔它:
Article::whereHas('translations', function ($query) use ($slug, $locale) { /* ... */ });
您需要从父范围继承变量:
public function show($locale, $slug) {
$article = Article::whereHas('translations', function ($query, $slug) use ($slug){
$query->where('locale', 'en')
->where('slug', $slug);
})->first();
return $article;
}
闭包也可以从父范围继承变量。任何这样的变量都必须传递给use-language构造
从这里开始:我知道事情会很简单。谢谢@rdiz,如何使用
when()
传递多个参数,或者我们必须为laravel中的两个参数编写when()
2次?
public function show($locale, $slug) {
$article = Article::whereHas('translations', function ($query, $slug) use ($slug){
$query->where('locale', 'en')
->where('slug', $slug);
})->first();
return $article;
}