Symfony2:向实体添加方法
Symfony2 : Add method to an Entity
我想向实体添加一个方法。
此方法来自实体标题的 returns 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;
}
}
查看您的代码,您将内容替换为简单的字符串。但是在你的模板文件中你根本不调用那个方法,你直接访问你的getter
。另外 X characters
是什么意思?如果你想截断你的标题和它的 return 部分,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
将调用该方法。
我想向实体添加一个方法。 此方法来自实体标题的 returns 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;
}
}
查看您的代码,您将内容替换为简单的字符串。但是在你的模板文件中你根本不调用那个方法,你直接访问你的getter
。另外 X characters
是什么意思?如果你想截断你的标题和它的 return 部分,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
将调用该方法。