Reputation:
I have a question with the same scenario as this question, except that it might happen that more than one _
is in the text.
An example;
57b42a0557cdd_Filename_whatever.pdf
How can I omit everything up until the first underscore (including the underscore) to keep the rest like Filename_whatever.pdf
The random uniquifier can be of a different length, but there will always be an underscore between it and the actual filename.
Like in the mentioned question; {{ filename|split('_')[1] }}
might work, but what if the actual filename has an underscore?
I want it preferably in twig just for displaying purposes because the complete unique name is used on different parts of the project as well.
Upvotes: 8
Views: 25744
Reputation: 15636
As seen in the documentation, split
also supports the limit
parameter as explode
, so you can do :
{{ '57b42a0557cdd_Filename_whatever.pdf' | split('_', 2)[1] }}
{{ '57b42a0557cdd_Filename_what_ever.pdf' | split('_', 2)[1] }}
{{ '57b42a0557cdd_File_name_whatever.pdf' | split('_', 2)[1] }}
Upvotes: 19
Reputation: 7902
Another option (assuming that the file is part of an entity) is to write a function on the entity that that returns what you want.
For example;
<?php
namespace AppBundle\Entity;
class MyEntity
{
// ... other attributes
private $hashFileName;
private $cleanFileName;
// other functions
public function getHashFileName()
{
// as per you example; 57b42a0557cdd_Filename_whatever.pdf
return $this->hashFileName;
}
public function getCleanFileName()
{
$withouthash = explode('_', $this->hashFileName,2);
return $withouthash[1];
}
}
Then in your twig file;
{{ myObject.cleanfilename }}
Upvotes: 1