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 Bundle Laravel Package

frequence-web/contact-bundle

Contact bundle from Frequence Web for PHP applications. Adds reusable contact form handling so you can capture, store, and manage incoming contact requests through a simple configurable integration. Ideal for adding a ready-made contact workflow to Symfony/PHP projects without building form and pers...

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: Poor — this is not a Laravel package. The name and namespace (FrequenceWebContactBundle) indicate a Symfony bundle, not an Illuminate-compatible package. It will depend on Symfony's DependencyInjection, HttpKernel, and EventDispatcher components and follow Symfony bundle conventions (bundle class, extension, configuration tree, service definitions in YAML/XML). Laravel's equivalents — service providers, the Illuminate\Events dispatcher, config publishing, facades — are structurally different. The only genuine overlap is the concept: dispatching domain events on contact lifecycle actions (submission, validation, persistence, notification). That pattern maps cleanly onto Laravel's event/listener system, but the code does not.

Integration feasibility: Low as a dependency, medium as a reference implementation. There is no evidence of a Laravel service provider, no illuminate/* constraints, likely PSR-0 or early PSR-4 autoloading, and PHP version constraints from the Symfony 2 era that will conflict with modern Laravel (PHP 8.2+, Symfony 6/7 components). Attempting composer require in a Laravel app will almost certainly produce dependency resolution failures or force downgrades of shared Symfony contracts. Feasible path: vendor the source for reading, extract the event contracts and dispatch points, and reimplement natively.

Technical risk: High.

  • Abandonment: 4 stars, 0 dependents, and a Symfony 2-era lineage indicate no active maintainer, no release cadence, and no security response capability.
  • Dependency surface: Symfony component version pins will collide with Laravel's own Symfony contract usage.
  • Correctness unknown: no test signal, no ecosystem adoption, no third-party audit. Event-based contact flows touch PII, validation, and notification paths — silent dispatch failures are hard to detect.
  • Mitigating factor: MIT license is permissive, so forking or porting concepts carries no legal friction, only attribution obligations.

Key questions for the requester:

  1. What does "contact" mean here — a contact form submission pipeline, a CRM-style contact entity, or outbound messaging? The bundle's scope determines whether the concept is even reusable.
  2. Which behaviors are required: event emission for audit/notification, pluggable listeners, or just a form handler?
  3. Is the requirement "use this package" or "implement event-driven contact handling"? These lead to very different decisions.
  4. Who owns maintenance if we fork, and what is the security review path for PII-handling code?

Integration Approach

Stack fit: Essentially nil out of the box. A Laravel 10/11 application cannot consume a Symfony bundle idiomatically. There is no bundle registration equivalent, no config/contact.php publish path, and no Laravel-native event classes. Treat this repository as a design reference, not a dependency.

Recommended migration path — concept port, not package adoption:

  1. Audit the source (small codebase): enumerate event classes, dispatch sites, listeners, and configuration knobs. Document the contact lifecycle state machine it assumes.
  2. Map to Laravel primitives: Symfony EventDispatcher → Illuminate\Contracts\Events\Dispatcher; bundle services → a package service provider with bound interfaces; extension config → config/contact.php with mergeConfigFrom and publishes; listener tags → Event::listen or auto-discovered listeners.
  3. Build an internal package under our namespace (acme/laravel-contact-events) with the event contracts, a service provider, publishable config, and feature tests. Retain the MIT attribution notice for any ported logic.
  4. Do not carry forward Symfony container wiring, YAML service definitions, or bundle bootstrapping — reimplement, don't transliterate.

Compatibility considerations:

  • Confirm the original's PHP floor; expect it to be well below our runtime and to use deprecated syntax.
  • Check autoloading style (PSR-0 vs PSR-4) if any code is copied verbatim.
  • Verify no reliance on Symfony's Request/Response objects leaking into domain logic — if present, that coupling must be broken before reuse.
  • Our package should declare explicit illuminate/support and PHP constraints and be tested against the Laravel versions we actually run.

Sequencing:

  1. Spike (1–2 days): read the repo, produce an event inventory and a gap analysis against our requirements.
  2. Decision gate: fork-and-port vs. clean-room build. Given 0 dependents and no upstream activity, clean-room build using the event inventory is usually cheaper than porting.
  3. PoC port of one event end-to-end (submission → dispatch → listener → notification) with tests.
  4. Package hardening: config, validation, spam/PII handling, observability.
  5. Adoption, then explicitly record that the upstream is not a dependency and requires no update tracking.

Operational Impact

Maintenance: We inherit 100% of the maintenance burden the moment we copy or fork. Upstream is effectively dormant — no issue triage, no security patches, no PHP/Laravel version compatibility work. Budget a maintained internal fork or, preferably, an internally owned package with a named code owner. Add it to the dependency register as "vendored concept, self-maintained" so it does not masquerade as a third-party dependency with upstream support.

Support: No community, no documentation beyond a README, and 0 dependents means no external signal that anyone has run this in production recently. Internal knowledge transfer must be deliberate: the event inventory document becomes the primary artifact, not the code.

Scaling: The package itself is thin — event dispatch and contact handling — so it is not a scaling bottleneck. Scale characteristics are determined by what our listeners do (synchronous notification, external CRM calls, queue usage). Recommend Laravel queued listeners for any I/O-bound reaction, and ensure events carry identifiers rather than full serialized payloads to keep queue messages small and PII exposure contained.

Failure modes to design against:

  • Silent non-dispatch: if the port misses a dispatch site, downstream notifications/audits simply never fire with no error. Mitigate with integration tests asserting event emission per lifecycle transition.
  • Dependency resolution failure: happens only if someone later tries to add the original package — guard with a composer.json conflict entry and a note in the ADR.
  • PII leakage: contact payloads in events can end up in logs, queues, or failed-job tables. Define what is carried in the event vs. fetched by ID.
  • Spam/abuse: event-driven design makes it easy to add listeners that amplify abuse (e.g., auto-reply storms). Rate limiting and validation belong in the domain layer before dispatch.
  • Unvalidated assumptions: the original may assume Symfony request context or session availability; those assumptions break under Octane, queues, and CLI contexts.

Ramp-up: Code volume is small, so comprehension cost is low in absolute terms — but the idioms are Symfony 2-era and unfamiliar to a Laravel team, which inflates the effective ramp. Estimate 2–4 days for a senior engineer to complete the audit and event inventory, 1–2 weeks for a hardened internal package with tests, and ongoing low-touch maintenance thereafter. The opportunity signal (0.76) suggests the problem space — event-driven contact handling — is worth pursuing even though the artifact is not adoptable; direct the investment at the pattern, not the package.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager