A Symfony bundle that provides automatic slug generation and slug-based routing (ParamConverter resolution by ID or slug) for Doctrine entities implementing SluggableInterface.
- Generic
SluggableInterfacefor entities - ParamConverter that works with both IDs and slugs
- Automatic service registration
- Works with Gedmo Sluggable behavior
- Install the bundle via Composer:
composer require yic/sluggable-bundle
use YIC\SluggableBundle\Entity\Interface\SluggableInterface; use Gedmo\Mapping\Annotation as Gedmo; class Product implements SluggableInterface { #[Gedmo\Slug(fields: ['title'])] private ?string $slug = null; public function getSlug(): ?string { return $this->slug; } public function setSlug(?string $slug): self { $this->slug = $slug; return $this; } }
#[Route('/products/{id}', name: 'product_show')] public function show(Product $product): Response { // Works with: // /products/1 (ID) // /products/some-name (slug) }
Default config (config/packages/yic_sluggable.yaml):
yic_sluggable:
# Enable slug fallback when ID not found
slug_fallback: true
# Clone git clone https://github.com/yaovicoder/sluggable-bundle.git cd sluggable-bundle # Install deps composer install # Run tests composer test
| Package | Version | Purpose | |----------------------------------|-----------|---------------------------| | php | ^8.1 | PHP runtime | | symfony/framework-bundle | ^6.4 | Symfony core | | doctrine/orm | ^2.15 | Database abstraction | | gedmo/doctrine-extensions | ^3.11 | Slug behavior | | sensio/framework-extra-bundle | ^6.0 | ParamConverter |
| Package | Version | Purpose |
|----------------------------------|-----------|---------------------------|
| phpunit/phpunit | ^10.0 | Testing |
| symfony/phpunit-bridge | ^6.4 | Symfony test integration |
| vimeo/psalm | ^5.22 | Static analysis |