实体业务逻辑传递给Twig

时间:2017-07-17 21:58:51

标签: php entity-framework symfony doctrine twig

我试图在我的实体中实现一些简单的业务逻辑,将它传递给Twig,但我似乎在某处失败了。

我有两个实体用户客户,他们正在扩展一个名为的抽象实体,并分享一些字段,包括性别

我想在Person Entity中创建一个isser,它获取性别的整数值(0或1),并将其转换为男性或女性的字符串,如:

{% for person in person %}
      <tr>
          <td>{{ person.gender.isMale }}</td>
      <tr>
{% endfor %}

这样我就可以在我的Twig模板中传递这样的业务逻辑:

def get_docs(data, url):

    response = requests.Session().get(url)
    tree = html.fromstring(response.text)

    heading = tree.findtext('.//h1[@class="gamma"]')

    for item in tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']"):
        title = item.findtext('.//a')
        sheetname = heading.split(" ")[-4]
        if sheetname in data:  
            data[sheetname].append([title])  
        else:  
            data[sheetname] = [[title]]
    save_data("mth.ods", data)

Twig中的person属性是一个从Controller传递的查询,它将一些结果保存在一个数组中,这两个实体是两个实体的连接字段。

我已经创建了一个Twig AppExtension作为过滤器,它可以工作,我只是想将它传递给实体逻辑,但我得到的是:无法访问属性(&#34; isMale&#34; )对整数变量(&#34; 0&#34;)

可能是虚拟财产?

2 个答案:

答案 0 :(得分:2)

在twig模板中,您将gender视为具有方法isMale的对象。如果性别是一个实体/对象本身,那么您拥有的person.gender.isMale将是有效的。如果只是将其更改为person.isMale

,您应该能够拥有可行的解决方案
{% for person in person %}
      <tr>
          <td>{{ person.isMale }}</td>
      <tr>
{% endfor %}

https://twig.symfony.com/doc/2.x/templates.html#variables

答案 1 :(得分:1)

你正试图做这样的事情:

person->gender() = 0;

然后:

gender->isMale();

但是,您可以看到0->isMale()无效。

所以你需要这样的东西:

{{ person.getGender }}

其中getGender是一个返回性别的字符串表示形式的getter(例如“male”)。