I would like to add a method to an Entity. This method returns X characters from the Entity's title, and i would like to print this title in my twig file. Is it possible ?
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 %}
entity :
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;
}
}
Looking at your code you replace your content with simple string. But in your template file you do not call that method at all, you directly access your getter
. Also what does X characters
means? If you want to truncate your title and return part of it, Symfony is providing a really handy filters for that. All you have to do is register the service:
services:
twig.extension.text:
class: Twig_Extensions_Extension_Text
tags:
- { name: twig.extension }
After that its as simple as {{ blog.content | truncate(50) }}
. If you want to preserve your words, include its second argument, like this | truncate(50, true)
. If you want custom separator, include it as 3rd
argument.
If I did not understood your question correctly, let me know.
- Update -
If all you want is to define custom method that would do some specific logic to your property, then do it like this:
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);
}
Then calling blog.truncatedTitle
will invoke that method.