happyr/slugify-bundle
A Symfony bundle for generating URL-friendly slugs from titles and other text. It integrates with Doctrine entities and Twig to help you create, store, and render clean slugs in your application.
cocur/slugify. That is a wrapper around a wrapper. For Laravel, Str::slug() ships in the framework and cocur/slugify is one composer require away, so the "buy" option is already cheap and the "buy this specific thing" option carries cost we don't recover.ServiceProvider, no facade, no publishable config, and the bundle lifecycle it depends on (AppKernel registration, DI extensions) does not exist in Laravel. That mismatch is a same-day reject, not an integration ticket.Str::slug() or cocur/slugify and the roadmap dates do not move.Adopt only if all of the following hold:
|slugify in templates — and have no appetite for instantiating a slugifier directly.Look elsewhere in every other case:
Str::slug() for ASCII slugs, cocur/slugify if you need transliteration rules or language hints, and spatie/laravel-sluggable if you want model-level slug lifecycle with uniqueness. All are PHP 8-ready, tested, and actively used.cocur/slugify directly or AsciiSlugger from symfony/string. The bundle layer is redundant.Two questions worth asking any requester before spending time: what requirement does Str::slug() or spatie/laravel-sluggable fail to meet? and is there a live business driver — for example, a legacy Symfony app where we want shared behavior across both codebases? The second is the only scenario where this bundle has any bearing, and even then the shared artifact should be a standalone library, not a bundle.
Recommendation: do not adopt. No roadmap item is blocked.
We evaluated happyr/slugify-bundle for slug generation and it fails on framework fit and on maintenance risk. It is a Symfony 2 bundle in a Laravel context — no service provider, no facade, no config publishing — so any use requires us to write custom container wiring around a wrapper we would not otherwise need. The health signals are uniformly poor: 2 stars, 0 dependent projects, and a host framework that has been end-of-life since 2018. Composer will very likely refuse to resolve it against current Laravel and PHP constraints, and there is no community to catch regressions and no realistic path to a security patch.
Engineering. The capability we need already exists: Str::slug() is in the framework, and cocur/slugify is the drop-in if we want richer transliteration rules. Both are PHP 8-ready and actively maintained. Estimated effort to cover our requirements — transliteration, configurable separator, plus uniqueness handled where it belongs, at the database constraint — is under a day with either. That is cheaper than the integration, review, and ongoing ownership work this bundle would demand. The correct pattern, if we want abstraction, is a small Slugifier interface in our own code bound to cocur/slugify; two to four days of investigation with a probable "no" is the realistic frame for adopting the bundle itself.
Product. URL and SEO work proceeds on the same schedule using a first-party approach, with lower long-term maintenance drag and a cleaner dependency story for future framework and PHP upgrades. The one failure mode worth naming: if we did adopt it and later swapped it out, slugs generated before and after could silently diverge, breaking existing URLs and lookups — invisible until a user reports a 404.
If a legacy Symfony 2 service already depends on it. Leave it pinned, add it to the dependency risk register, and fold its removal into the next framework upgrade rather than scheduling standalone work.
Action. Close the request with this rationale and redirect to Str::slug() or spatie/laravel-sluggable. Reserve further spend only for the narrow case where a concrete, documented transliteration requirement cannot be met by either — and even then, extract the character maps rather than take the dependency.
How can I help you explore Laravel packages today?