我有一个与树枝数据混合的jquery函数:
$(document).on('change', '.item-select', function() {
var optionValue = $(this).val();
{% for key, value in columns_arr %}
{% for k,v in group %}
if (optionValue == "{{ v.id }}") {
{% set output = v %}
{% for method in value|split('.') if method != '' %}
{% set output = attribute(output, method) | default('') %}
{% endfor %}
var {{ value | split('.') | first }} = "{{ output }}";
}
{% endfor %}
{% endfor %}
if (optionValue) {
var entity = $(this).find(':selected').attr('data-parent');
var relation = $(this).find(':selected').attr('data-slug');
var uuid= $(this).find(':selected').attr('data-id');
table.row.add({
{% for key, value in columns_arr %}
{% for k,v in group %}
"{{ value | split('.') | first }}": {{ value | split('.') | first }},
{% endfor %}
{% endfor %}
}).draw();
$('option', this).first().prop('selected', true);
fetch(`/row/${entity}/${relation}/${uuid}/${optionValue}`,{
method: 'POST'
}).then(res => window.location.reload());
}
});
我收到错误消息:
在渲染模板期间引发了异常 (“可捕获的致命错误:类的对象 代理__CG __ \ App \ Entity \ Productgroup无法转换为 字符串”)。
错误应该在这一行:
var {{value | split('。')| first}} =“ {{output}}”;
答案 0 :(得分:2)
也许您可以尝试在实体中实现JsonSerializable
,然后使用其方法__toString()
和jsonSerialize
并根据需要重写它们。
答案 1 :(得分:2)
如果给Twig一个对象,它将隐式调用该对象的__toString()方法。这就是您收到错误消息的方式。
您是否正在寻找该对象的变量值?在这种情况下,请使用字段名称(例如output.something)。
您显然想做的是将对象用作对象,并使用javascript函数处理它。最简单的方法是使用json_encode过滤器,只要您的基础Symfony / Doctrine对象是干净的,它就会生成具有正确编码和所有内容的JSON对象。
var {{ value | split('.') | first }} = "{{ output | json_encode }}";
应该可以解决问题。
但是说实话,我认为代码风格正在麻烦中。您应该显式分配变量,而不要像看起来那样遍历字段名。