kphoen/contact-bundle
kphoen/contact-bundle is a lightweight Symfony bundle for adding a contact form to your application. It provides the form and basic message-handling workflow, making it easy to collect inquiries and integrate contact requests into an existing Symfony project with minimal setup.
Architecture fit — incompatible by design. kphoen/contact-bundle is a Symfony bundle, not a Laravel package. It carries the full Symfony idiom set: a Bundle class, a DI extension loading service definitions, Doctrine ORM entities and mappings, Symfony Form types, Twig templates, YAML/XML routing, and Swiftmailer-based delivery. Laravel expects service providers, Eloquent/query builder, Blade, FormRequests, and the Mail facade. There is no shim path — a Laravel app cannot register a Symfony bundle without importing the Symfony kernel, and importing the kernel to send a contact form is an architectural non-starter. Fit score as a drop-in dependency: zero.
Integration feasibility — reference material only. The realistic use is as a design reference: how it models a contact submission, what fields it validates, how it routes recipients, whether it persists or fire-and-forgets. That is roughly an hour of reading. Everything else — the code, the wiring, the templates — is throwaway.
Technical risk — high and unrecoverable. The repository is archived, last released 2016-01-21, with 7 stars and 0 dependents. That places it in the PHP 5.6/7.0 and Symfony 2.8/3.x era. Swiftmailer, its delivery layer, reached end of life in November 2021 and receives no security patches. Pinning it alongside any modern dependency graph will either fail Composer resolution outright or force transitive downgrades that compromise the rest of the application. MIT license means legal reuse is clean; the supply-chain risk is not about licensing, it is about a dead dependency with no CVE response path. The quality score (0.0625) is consistent with this. The high opportunity score (0.94) signals that contact-form tooling is a real, recurrent need — it does not signal that this artifact is the answer to it.
Key questions for the team.
Verdict: do not adopt. Port the concept into a native Laravel module.
Stack fit. None at the dependency level. The only transferable assets are the domain shape: a submission payload (name, email, subject, body), validation rules, a recipient-routing config, and an optional persistence record. Every one of these has a first-class Laravel equivalent and none require the bundle.
Migration path. Write the module natively rather than adapting the bundle. A minimal, production-worthy implementation:
ContactController with a StoreContactRequest FormRequest (validation, honeypot, rate limiting via throttle middleware).ContactMessage Mailable with a Blade template, dispatched through a queued job so the HTTP response is not blocked on SMTP.contact_messages migration only if the requirement calls for persistence or audit; otherwise skip it and keep the system stateless.config/contact.php so ops can retarget without a deploy.Realistic effort: 1–2 developer-days including tests. Adapting the bundle to run under Laravel is not a smaller number — it is a larger, unbounded one.
Compatibility. The bundle's PHP and Symfony constraints predate modern runtimes by four or more major PHP versions. It will not install in a current stack, and even in a legacy Symfony app it would pull EOL mail infrastructure. There is no forward-compatibility story and no maintainer to produce one.
Sequencing.
Note the sequencing inversion: mail infrastructure is step 4, not the last step. Most contact-form incidents are deliverability and spam incidents, not application-logic incidents.
Maintenance. Adopting an archived bundle transfers 100% of maintenance to your team on day one, and unlike in-house code, you inherit a codebase written against a framework generation your engineers do not work in daily. The native alternative is ~200 lines your team already knows how to read.
Support. There is no maintainer, no issue triage, no release cadence, and effectively no community — 7 stars and 0 dependents means no Stack Overflow corpus, no blog posts, no second adopter to compare notes with. Any incident is a solo debugging exercise against unfamiliar Symfony 2/3 idioms. Contrast with the native path, where the support surface is Laravel's documentation and the team's existing expertise.
Scaling. Contact-form traffic is trivially low-volume; horizontal scaling is a non-issue for either option. The real scaling constraints are (a) mail provider throughput and reputation, and (b) spam volume, which is adversarial and unbounded. Neither constraint is addressed by the bundle, and the EOL Swiftmailer layer actively worsens (a) by lacking modern transport and retry semantics.
Failure modes to plan for.
Ramp-up. Near-zero positive ramp-up. An engineer would spend more time reverse-engineering a decade-old Symfony bundle than writing the Laravel equivalent from scratch. The genuine ramp-up cost in this workstream is mail deliverability and anti-spam configuration — operational knowledge, not package knowledge — and it is identical regardless of which implementation path is chosen. That asymmetry is the whole argument: the bundle adds cost and subtracts nothing from the hard part.
How can I help you explore Laravel packages today?