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-bundleuse 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 |