Sluggable generates slugs (uniqueness is not guaranteed) for an entity.
Will automatically generate on update/persist (you can disable the on update generation by overriding shouldRegenerateSlugOnUpdate()
to return false
.
You can also override the slug delimiter from the default -
by overriding getSlugDelimiter()
method.
Slug generation algo can be changed by overriding generateSlugValue()
.
Use cases include SEO (i.e. URLs like http://example.com/post/3/introduction-to-php
)
<?php
declare(strict_types=1);
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\SluggableInterface;
use Knp\DoctrineBehaviors\Model\Sluggable\SluggableTrait;
/**
* @ORM\Entity
*/
class BlogPost implements SluggableInterface
{
use SluggableTrait;
/**
* @ORM\Column(type="string")
* @var string
*/
private $title;
/**
* @return string[]
*/
public function getSluggableFields(): array
{
return ['title'];
}
public function generateSlugValue($values): string
{
return implode('-', $values);
}
}