Symfony2:向实体添加方法

时间:2015-04-24 21:50:22

标签: php symfony entity add

我想向实体添加一个方法。 此方法从实体的标题返回X个字符,我想在我的twig文件中打印此标题。 有可能吗?

twig

<ul class="nav nav-pills nav-stacked">
{% for blog in listBlogs %}
    <li>
        <a href="{{ path('l3_blog_view', {'id': blog.id}) }}">
            {{ blog.getTruncatedTitle }}
        </a>
    </li>
{% endfor %}

实体

class Blog
{
 /**
 * @var string
 *
 * @ORM\Column(name="content", type="text")
 */
private $content;

public function setTruncatedTitle($content)
{
    $this->content = "Hey";

    return $this;
}

/**
 * Get content
 *
 * @return string 
 */
public function getTruncatedTitle()
{
    return $this->content;
}

}

1 个答案:

答案 0 :(得分:2)

查看代码,用简单的字符串替换内容。但是在您的模板文件中根本没有调用该方法,您可以直接访问getterX characters的含义是什么?如果你想截断你的标题并返回它的一部分,Symfony正在为它提供一个非常方便的过滤器。您所要做的就是注册服务:

services:
twig.extension.text:
    class: Twig_Extensions_Extension_Text
    tags:
        - { name: twig.extension }

之后就像{{ blog.content | truncate(50) }}一样简单。如果你想保留你的单词,请包含它的第二个参数,比如| truncate(50, true)。如果您想要自定义分隔符,请将其包含为3rd参数。

如果我没有正确理解你的问题,请告诉我。

- 更新 -

如果你想要的只是定义为你的属性做一些特定逻辑的自定义方法,那么就这样做:

public function getTruncatedTitle() {
    $title = $this->title; // or $this->content - whatever suits your needs.

    // You can apply your custom logic here like that.
    return substr($title, 0, 10);
}

然后调用blog.truncatedTitle将调用该方法。