【问题标题】:Symfony2 : Add method to an EntitySymfony2:向实体添加方法
【发布时间】:2015-04-24 21:50:21
【问题描述】:

我想为实体添加一个方法。 此方法从实体的标题返回 X 个字符,我想在我的 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;
}

}

【问题讨论】:

  • 最好克制自己不要“它不起作用”。您能否至少包含一些您迄今为止尝试过的代码,以便人们可以真正帮助您?

标签: php symfony entity add


【解决方案1】:

查看您的代码,您可以用简单的字符串替换您的内容。但是在您的模板文件中,您根本不调用该方法,而是直接访问您的getter。还有X 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 将调用该方法。

【讨论】:

  • 事实上我想从我的树枝模板中调用我实体的一个方法。
  • @Léo Martin,我添加了更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2011-05-17
  • 1970-01-01
  • 2023-03-24
  • 2012-04-28
相关资源
最近更新 更多