riper/exception-transformer
Exception Transformer for Laravel turns thrown exceptions into consistent, structured responses. Map exception types to custom transformers to control status codes, messages, and error payloads, so API error output stays predictable and your exception handlers stay clean.
Architecture fit. Unchanged and still disqualifying. v2.0.0 confirms the package remains a Symfony bundle (RiperFr\ExceptionTransformerBundle) targeting the Symfony HttpKernel exception flow (kernel.exception event / HttpKernelInterface). Laravel has no equivalent kernel-event seam — exception handling is owned by App\Exceptions\Handler and the Illuminate\Foundation pipeline. The release notes do not mention Laravel, a service provider, a facade, or any framework-agnostic entry point. Architectural fit with a Laravel codebase remains none.
Integration feasibility. Still low, and the new version does not move the needle. The only integration-adjacent change is widened platform support (Symfony 4, PHP ≥ 7.4), which expands compatibility within the Symfony ecosystem but adds nothing for Laravel. A Laravel bridge would still require importing Symfony HttpKernel/EventDispatcher and re-implementing behavior Laravel provides natively (renderable(), custom renderers, report() overrides).
Technical risk. High, with two small offsets and several unchanged hazards:
Key questions.
Handler renderers and a small internal transformer class? (Expected: yes.)composer require resolve on PHP 8.2+ / Laravel 11?Stack fit. Still poor. The v2.0.0 release does not bridge the Symfony-bundle/Laravel-service-provider gap. It imports a foreign extension model (bundle registration, DependencyInjection compiler passes, YAML/XML config) that Laravel's bootstrap will not honor. Note the directional mismatch: the release raises the floor to PHP 7.4 while Laravel has moved past it, so compatibility is narrowing, not widening, relative to our stack.
Migration path. Not recommended, unchanged. If exception transformation is genuinely required:
ExceptionTransformer contract with toArray() / normalize().App\Exceptions\Handler::register() or a renderable() closure.Responsable or a response-preparation hook.The v2.0.0 BC break is only a migration concern if we had a v1 footprint. We do not, so the practical effect is: no new reason to adopt, and no cost avoided either.
Compatibility. Still untested against Laravel 10/11 and PHP 8.2/8.3. The declared floor (PHP 7.4, Symfony 4) is below our runtime and below current symfony/* constraints; expect resolution friction and possible --ignore-platform-reqs, which remains a red flag for a production dependency. GitHub Actions CI is a positive signal but we cannot see what matrix it actually exercises — verify before treating it as evidence of 8.2/8.3 coverage.
Sequencing. Unchanged: (1) define the transformation requirement and sample payloads; (2) build the native Laravel transformer as the default path; (3) only on a hard blocker, spike this bundle in isolation for one sprint; (4) never sequence it ahead of the native implementation. Add one gate before the spike: confirm via composer why-not that the package resolves against our current Laravel/PHP matrix — recent activity does not imply current-matrix support.
Maintenance. Marginally improved on paper, effectively unchanged in practice. There is now a tagged major release and modernized CI, which is better than the four-year silence the prior assessment assumed. But there is still a single upstream author, no stated security policy, no release cadence, and the new floor is already EOL software. Every future PHP or framework bump remains our migration project; the v2.0.0 BC break with no migration guide is a preview of that cost.
Support. None. No vendor, no SLA, no community traffic to mine. A v2.0.0 with zero dependents means any defect we hit is likely the first report and will land on our on-call engineers with no upstream recourse — on error handling, the highest-severity incident class.
Scaling. Performance is a non-issue (one transform per request). The organizational cost is unchanged: every engineer must learn a bespoke, framework-mismatched mechanism for behavior that is otherwise standard Laravel. A fresh major release makes this slightly more tempting to adopt and therefore slightly more expensive to justify later.
Failure modes. All prior modes persist; the release adds one:
composer update work across the repo.Ramp-up. Low value, non-trivial cost, unchanged. The package is small enough to read, but its value proposition duplicates native capability. Onboarding effort is better spent documenting our own Handler conventions. Recommended disposition: do not adopt. The v2.0.0 release is a net-neutral signal — real but lagging activity on a package that still solves a Symfony problem we do not have. Solve exception transformation natively and revisit only if a concrete, unsolved requirement emerges that Laravel's pipeline cannot express.
How can I help you explore Laravel packages today?