kphoen/sms-sender-bundle
A Symfony bundle that integrates the SMS Sender library, letting PHP applications send text messages through configurable gateways and providers via a simple service-based API.
Premise check first: this is not a Laravel package. kphoen/sms-sender-bundle is a Symfony2 bundle — a Kernel-registered bundle with a DependencyInjection/*Extension class, XML/YAML service definitions, and a Resources/config tree. Laravel has no bundle concept, no AppKernel, and no autoloading convention that maps to Symfony's bundle namespace layout. Any "integration" into a Laravel codebase is therefore a port, not an install.
Architecture fit: Poor. The bundle's only real value is (a) service-container wiring and (b) a thin Symfony-facing wrapper around the kphoen/sms-sender library's SenderInterface and its concrete senders. In a Laravel app the container wiring is replaced by a service provider, so roughly 80% of the package's code is dead weight. The genuinely reusable asset is the underlying library's sender abstraction and its concrete provider adapters — and even that is a 2014-era design that predates PSR-18 HTTP clients and modern provider SDKs.
Integration feasibility: Low-to-moderate, and asymmetric in effort. composer require will resolve only against PHP 5.x-era constraint sets; on a modern PHP 8.1+ / Laravel 10+ stack it will not install without --ignore-platform-reqs and a fork. There is no maintained path. The honest options are: (1) reimplement a SmsSender-style interface in the app and write one or two adapters against a current provider SDK, or (2) lift the sender interface shape as a design reference and discard the code. Neither is a "leverage" story — both are greenfield.
Technical risk: High and largely unmitigable.
[DEPRECATED]. There is no expected fix for anything, including security issues.Key questions for the team:
kphoen/sms-sender? With 0 dependents reported, almost certainly not — confirm before spending review time.Recommendation: Do not adopt. Treat the repository as a historical reference for interface shape only.
Stack fit: None at the framework layer. A Symfony bundle's integration contract is AppKernel::registerBundles() plus container compilation; Laravel's is register()/boot() on a service provider plus the facade/container binding system. These do not overlap. There is no shim, no bridge package, and no community precedent for running Symfony2 bundles inside Laravel. Forcing it would mean vendoring the bundle, stripping the DI extension, and manually re-registering each service — at which point you have rewritten the package and inherited only its maintenance debt.
Migration path (the defensible one):
App\Contracts\SmsSender with a single send(SmsMessage $message): SmsResult method. Keep it deliberately narrower than the 2014 interface; skip anything the app does not call.null/log adapter bound in local and testing environments — mirroring the NullSender pattern the old library got right.Compatibility: Assume the package is incompatible with anything you are running. Concretely: no PHP 8 typed-property or union-type support, PSR-0-era autoloading assumptions, Symfony 2.3–2.8-era container APIs, and dependency constraints pinned to abandoned HTTP/mail libraries. Verify by reading composer.json in the repository rather than trusting the description — but budget for the answer being "unusable on our stack."
Sequencing: Interface first, one adapter second, queue integration third, second provider last and only if a real requirement exists. Do not sequence the evaluation of this package ahead of that work — it cannot inform it. The entire evaluation should cost under an hour, most of it spent reading composer.json and the sender interface, and it should terminate in a decision to build rather than adopt.
If a fork is somehow mandated: scope it as a hard fork under application ownership, drop the bundle layer entirely, keep only the SenderInterface and concrete adapters, and accept that the team now owns every transitive dependency. That is a strictly worse outcome than the three-step path above, and should be documented as such.
Maintenance: Total, from day one. The upstream is deprecated and dormant; there is no version to pin to a supported branch, no security advisory channel, and no expectation of a patch. Any fork becomes an internal product with an internal owner — which is fine for a 100-line adapter and is not fine for a vendored framework plugin. Maintenance cost is not proportional to code size here; it is proportional to the number of abandoned transitive dependencies inherited.
Support: None external. No maintainer responsiveness, no issue tracker activity that matters, no community to escalate to. Internal support means one engineer reads the source. That is acceptable for a small, well-understood adapter and unacceptable for anything touching revenue-bearing notifications, where the failure question is "who do we call at 2am."
Scaling: The pattern the bundle encourages — synchronous send inside the request cycle — is the wrong shape. SMS gateways have per-second rate limits, variable latency (200ms to multi-second), and transient 5xx behavior. Sends belong on a queue with retries, exponential backoff, and a dead-letter path; that is Laravel's ShouldQueue notification or a Bus::dispatch job, none of which this package knows about. Concurrency scaling is therefore entirely a function of the code you write around it, not the package.
Failure modes to expect:
Ramp-up: Near-zero knowledge transfer available. There is no documentation beyond a README written for Symfony2 developers in 2014, no examples in a modern idiom, and no one on the team is likely to have seen this package before. Realistic ramp-up is "read the source," which for a two-class wrapper is an afternoon — but that afternoon buys you a deprecated code path, not a capability.
Bottom line for planning: budget this package at zero engineering days. Budget the replacement at three to five days: interface, one provider adapter, queue wiring, tests, and an alerting hook on send failures. That estimate is defensible, reviewable, and produces an asset the team owns — which this package, at 14 stars, one deprecation notice, and no release in twelve years, cannot.
How can I help you explore Laravel packages today?