Laravel 将附加参数传递给函数
Posted
技术标签:
【中文标题】Laravel 将附加参数传递给函数【英文标题】:Laravel where has passing additional arguments to function 【发布时间】:2016-04-26 01:46:51 【问题描述】:以下显然会导致未定义的变量。
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? 现在这可能很简单,但我找不到我需要搜索的内容。
【问题讨论】:
【参考方案1】:您必须使用use
将变量(在您的情况下为$slug
)传递到闭包(这称为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;
如果您以后想将$locale
与它一起传递,只需用逗号分隔即可:
Article::whereHas('translations', function ($query) use ($slug, $locale) /* ... */ );
【讨论】:
我知道这很简单。谢谢 嘿@rdiz,如何使用when()
传递多个参数,或者我们必须在laravel 中为两个参数写when()
2 次?【参考方案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;
闭包也可以从父作用域继承变量。任何此类变量都必须传递给使用语言构造。
从这里:http://php.net/manual/en/functions.anonymous.php
【讨论】:
以上是关于Laravel 将附加参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中将单个附加参数传递给 array_map 回调?