向lambda添加参数

时间:2019-04-11 07:53:28

标签: php mustache mustache.php

我正在使用Mustache的Lambda来实现模板中的翻译。

我的模板使用以下类型的标签:

<h1>{{#t}}Some translatable text{{/t}}</h1>

然后,在我的数据中,我注册了一个lambda来获取翻译:

$info['t'] = function($text, $render) {
   return translate($text);
}

但是,我希望能够在该lambda中设置语言环境,但是我似乎并没有正确地做到这一点:

$locale = "nl_NL";
$info['t'] = function($text, $render, $locale) {
   return translate($text, $locale);
}

不起作用(显然),因为Mustache使用两个参数调用了该lambda。尝试使用默认参数也不起作用:

$lc = "nl_NL";
$info['t'] = function($text, $render, $locale = $lc) {
   return translate($text, $locale);
}

因为不能将变量用作默认值。

我该如何工作?

2 个答案:

答案 0 :(得分:4)

我认为这里的变量范围有些问题,

$lc = "nl_NL";
$info['t'] = function($text, $render) use($lc) {
   return translate($text, $lc);
}

应该解决您的问题

答案 1 :(得分:2)

使用use关键字将变量绑定到函数的作用域中。

关闭可能会从父范围继承变量。任何此类变量都必须在函数标头中声明[使用]。

http://www.php.net/manual/en/functions.anonymous.php

$locale = "nl_NL";
$info['t'] = function($text, $render) use ($locale) {
   return translate($text, $locale);
}