Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Contact Form Bundle Laravel Package

idci/contact-form-bundle

A Symfony bundle that provides a ready-to-use contact form for your application, handling form building, submission and email delivery so you can add a configurable contact page with minimal setup and customization.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Framing for a TPM. The first job is to correct the premise: this is not a Laravel package. idci/contact-form-bundle is a Symfony2 bundle (roughly the 2.1–2.3 era), registered through AppKernel.php and the Symfony bundle contract. On a Laravel roadmap there is no adoption decision to make — there is only a reuse-as-reference decision. A TPM's leverage here is not integration management; it is (a) converting an abandoned artifact into a requirements spec, (b) killing the dependency question cheaply and permanently, and (c) protecting the delivery estimate from being contaminated by a port that will not converge.

Architecture fit — none, and not rescuable. The package's value lives entirely in its Symfony wiring: dependency-injection extensions, Resources/config/services.yml, annotation routing, Symfony Form types, Twig templates. Laravel has no bundle, no kernel, no container compiler pass to hook into. Stripping the wiring leaves a form type, a mailer call, and a template — all of which are hours of native work, not days of porting. The "social sharing" half is separate scope with a different lifecycle (share endpoints have degraded materially since this bundle's era) and should not ride along on the contact-form decision.

Integration feasibility — zero for code, high for requirements. There is no adapter seam worth building. The productive path is to treat the repository as a field-and-validation reference: read the form type for field set and constraints, read the templates for copy structure and error presentation, then discard the code.

Technical risk — elevated and asymmetric, because the cost lands after delivery.

  • Framework EOL: Symfony 2.x has been end-of-life since November 2018; no upstream security response exists.
  • Runtime conflict: the bundle targets the PHP 5.3–5.6 era; modern Laravel requires PHP 8.1/8.2+. Composer resolution fails deterministically — this is a known-cost spike, not an open question.
  • Transitive tree: likely Swiftmailer (EOL 2021) and Twig, meaning a second and third unmaintained dependency sitting directly in a PII-bearing request path.
  • Adoption signal: 1 star, 0 dependents. No issue triage, no PR review, no bug-surfacing population. Bus factor is one organization.
  • Compliance surface: contact forms ingest names, emails, and free-text. Running that through abandoned code is an incident-response liability, not merely a code-quality preference.

Key questions for the requestor — these are the TPM's actual deliverable.

  1. Is the requirement "a contact form with validation, spam control, and email delivery," or specifically "reuse this bundle"? If the former, framework fit is disqualifying before quality is discussed.
  2. Is there an existing Symfony2 estate this is meant to serve? If yes, that estate is itself EOL and needs its own assessment — do not let it hide inside a contact-form ticket.
  3. Who owns the fork, and what is the recurring cost of backporting PHP and mailer upgrades into a package nobody else uses?
  4. Is social sharing in scope, or incidental to the package name?
  5. Why does the composite score read 0.71 while opportunity reads 0.38? The scoring appears to reward packaging metadata over framework fit. Flag this to whoever owns the scoring model — a TPM should not let a mis-calibrated score become a decision input next quarter.

Recommendation: reject for adoption; retain as reference material. Record the rejection so the question is not re-litigated.

Integration Approach

Stack fit. There is none, and the native equivalents are stronger than the bundle on every axis: Blade plus FormRequest validation, a Mailable over the Mail facade with queue-backed delivery, CSRF middleware, throttling, and either a honeypot package or a maintained CAPTCHA/Altcha integration for spam. Every capability the bundle advertises is first-party in Laravel or covered by an actively maintained package.

Migration path — the word is wrong; this is a rewrite with a reference. The defensible sequence:

  1. Timeboxed spike (half a day, not two days). Run composer require idci/contact-form-bundle against the target Laravel version and capture the resolver failure verbatim. Output is a one-paragraph decision record, not a prototype. Pre-agree the kill criterion: any Composer conflict on symfony/* or php is terminal.
  2. Extract requirements, never code. Produce a written spec from the bundle as reference: field set and types, validation constraints per field, recipient/sender configuration, subject and body templating, spam posture, whether submissions persist or are email-only, error and success UX.
  3. Build natively against that spec: route and controller, FormRequest, Mailable, queued job, honeypot plus per-IP throttle, consent/retention handling, accessibility pass on labels and error messages.
  4. Do not vendor. No "just in case" copy in vendor/ or a fork branch. That is how a three-day feature acquires a permanent maintenance line item.

Compatibility. Three independent hard blocks, any one sufficient: the PHP version ceiling, the Symfony 2.x framework dependency, and the Twig/Swiftmailer transitive tree. There is no shim that resolves these without forking the framework itself, so do not fund a compatibility investigation.

Sequencing for a TPM. Run the spike in parallel with the native build, never ahead of it — the spike cannot produce information that changes the plan, so it must not sit on the critical path. Gate any further evaluation behind the pre-agreed kill criterion. If a genuine Symfony target surfaces later, the correct move is current Symfony (6.4/7.x) with symfony/mailer and a maintained form package, not a Symfony2 artifact.

Estimate. 1–3 dev days for the native build including tests and accessibility. Add half a day for the spike and decision record. Compare that against an open-ended fork-ownership cost — the comparison closes itself.

Operational Impact

Maintenance. Adoption means permanent ownership of a dormant fork. Every PHP minor upgrade, mailer change, and CVE becomes internal work. The steady-state cost is a recurring tax on a non-differentiating feature that a native build covers in days. This is the single strongest argument for the planning conversation: the bundle is cheaper on day one and more expensive by the end of the first quarter.

Support. No vendor, no SLA, no issue triage, no documentation beyond a README. Engineers reverse-engineer rather than escalate. Symfony2 expertise is scarce and depreciating, so adoption also creates a knowledge-retention problem — you are deliberately adding a skill the team will not want to keep.

Scaling. Contact-form volume is low; the scaling risk is delivery, not throughput. Symfony2-era bundles typically send synchronously in the request cycle, so SMTP latency, provider throttling, or a timeout degrades the user-facing response and can silently drop submissions. Queue-backed Mailable plus retry and failure logging eliminates that class of incident. The bundle does not, and retrofitting it is a rewrite of the exact code you adopted to avoid writing.

Failure modes to plan around.

  • SMTP timeout inside the request → 500 to the user, submission lost with no record.
  • Spam flood with no throttle → mailbox exhaustion and possible sender-reputation damage.
  • Header injection through unvalidated free-text fields.
  • Escaping and CSRF behavior governed by an unpatched Twig/Symfony tree.
  • Upstream disappearance from Packagist → clean CI runners break months later with no code change on our side.
  • Silent breakage on a PHP minor upgrade in the host environment.

Ramp-up. Native path: standard Laravel work, any team member picks it up, no specialist dependency. Bundle path: Symfony2 archaeology plus fork ownership plus the compliance conversation. The asymmetry is the decision.

Planning verdict. Allocate no integration capacity. Fund a half-day spike to document the rejection, then fund the native build. Log the package in the dependency-risk register as evaluated-and-rejected with the Composer failure attached, so the next person who finds the 0.71 score has the counter-evidence in the same record. If a stakeholder wants the bundle skimmed once for field-design inspiration, allow it as a one-hour reference read with no code committed — then ship our own.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings