我将模板的字符串数组传递给模板,我希望将其转换为jaavascript数组:
控制器文件(php):
$myVar = array('a','b','c');
所需的html:
var myVar = ["a","b","c"];
我尝试以下代码(树枝):
var myVar = ["{{ myVar | join('","') }}"];
但是树枝生成器将引号转换为html实体,这是结果:
var myVar = ["a","b","c"];
一些想法?
您需要应用raw
过滤器:
raw
Maerlyn的答案将起作用,但是它的缺点是var myVar = ["{{ myVar | join('","') | raw }}"];
数组中的值也将被原始输出,这取决于该变量的来源,可能会导致您网站中的漏洞,例如XSS。
我发现了两种方法来保持数组值的转义。第一种是使用带有myVar
语句的循环来检查它是否是最后一次迭代,以确定是否需要输出联接中使用的“胶水”:
if
第二种方法是让PHP您的PHP处理一切,包括转义,然后在Twig中输出原始字符串:
var myVar = [{% for val in myVar %}"{{ val }}"{% if loop.last == false %},{% endif %}{% endfor %}]
然后将$arr = array_map(
function($value) {
return '"' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '"';
},
$arr
);
$myVar = '[' . implode(',', $arr) . ']';
变量传递到您的视图,然后您可以执行以下操作:
$myVar