如何将对象转换为字符串(Twig和Symfony)?

时间:2019-02-25 11:05:23

标签: javascript loops symfony datatables twig

我有一个与树枝数据混合的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}}”;

2 个答案:

答案 0 :(得分:2)

也许您可以尝试在实体中实现JsonSerializable,然后使用其方法__toString()jsonSerialize并根据需要重写它们。

https://www.sitepoint.com/use-jsonserializable-interface/

答案 1 :(得分:2)

如果给Twig一个对象,它将隐式调用该对象的__toString()方法。这就是您收到错误消息的方式。

您是否正在寻找该对象的变量值?在这种情况下,请使用字段名称(例如output.something)。

您显然想做的是将对象用作对象,并使用javascript函数处理它。最简单的方法是使用json_encode过滤器,只要您的基础Symfony / Doctrine对象是干净的,它就会生成具有正确编码和所有内容的JSON对象。

var {{ value | split('.') | first }} = "{{ output | json_encode }}";

应该可以解决问题。

但是说实话,我认为代码风格正在麻烦中。您应该显式分配变量,而不要像看起来那样遍历字段名。