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

Extra Step Bundle Laravel Package

idci/extra-step-bundle

Symfony bundle for adding configurable extra steps to existing multi-step workflows. It provides services, routing, and templates to insert additional screens into forms, checkout, or other processes while preserving step order and state, extending flows without rewriting core logic.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: the premise doesn't hold. This package is a Symfony2 bundle, not a Laravel package. It ships as a Symfony\Component\HttpKernel\Bundle\Bundle, is discovered by the Symfony kernel's bundle registry, and is configured through a Symfony DependencyInjection extension. Laravel has no analog — auto-discovery reads extra.laravel and service providers, and a Symfony bundle exposes neither. It also is not standalone: it expands idci/step-bundle, so the pair must be evaluated together, and the base bundle's undocumented API governs everything.

What is genuinely transferable is the design pattern: a step registry plus a dynamic path resolver that computes the next step at runtime from user input, with navigation and state transitions handled outside the controller. That pattern is the actual product asset. The code is not.

Integration feasibility: near-zero as a dependency, moderate as a reference. Faithful adoption requires standing up a Symfony 2.x skeleton (EOL since November 2018). Porting the abstractions into Laravel is a rewrite of the integration layer, not an integration: DI container tag compilation for step registration, the Symfony EventDispatcher for transitions, HTTP-kernel controller resolution, and routing conventions are all framework-specific. Realistically we would reuse the conceptual model and some plain-PHP value objects, and rebuild everything else.

Technical risk: high, on multiple independent axes.

  • Lifecycle: PHP 5.x/7.0-era code against an EOL Symfony line; routine PHP 8 upgrades break legacy syntax (each(), create_function, old DI loaders, legacy PHPUnit constraints).
  • Abandonment: zero stars, zero dependents, score 0. Zero dependents on a Composer package means essentially no one has run this in production outside the originating consultancy — no community validation, no downstream pressure to fix bugs, no Stack Overflow corpus.
  • Supply chain: the transitive graph is pinned to symfony/* ^2.x, which will hard-conflict with Laravel 9+/Symfony 6/7 constraints. Expect Composer resolution to fail before a single line of code runs, with --ignore-platform-reqs as the only workaround — itself an operational liability.
  • Correctness surface: runtime-computed paths are non-deterministic by construction, making flows harder to test, reproduce, and reason about during incident response.
  • Provenance: single-vendor, no advisory channel, no SLA, no successor package.

Key questions to resolve before any further spend.

  1. What workflow semantics does the business actually need — linear wizard, conditional branching, loops, mid-flow step injection, per-customer variants? (If linear, this whole evaluation is moot.)
  2. Is there a concrete, sponsored use case, or is this speculative discovery?
  3. Are we maintaining a legacy Symfony 2.x app where this is the existing dependency? If no, the answer is already substitution.
  4. Is idci/step-bundle documented anywhere, or must its API be reverse-engineered from source?
  5. What license and PHP/Symfony constraints are declared, and is there any test coverage at all?
  6. Who would own a fork, and for how long?

Absent a compelling answer to (1) and (2), the recommendation is reject-and-substitute.

Integration Approach

Stack fit. Against our Laravel estate: none. No bundle loader, no kernel, no tag compiler, no auto-discovery hook. Against Symfony: only the 2.x/3.x band, which is itself EOL — so even the "native" path targets an unsupported platform. The only modern-fit option in the same problem space is the Symfony Workflow component (framework-agnostic, Composer-installable inside Laravel) or a maintained Laravel-native state machine.

Migration path — ranked.

  1. Substitute (recommended). Model steps and transitions on the Symfony Workflow component standalone inside Laravel, or a maintained Laravel workflow package. Preserves the capability, drops the EOL dependency, keeps the hiring/onboarding story intact. Preferred default.
  2. Fork and port (only with a funded use case). Reimplement step registration as a Laravel service provider with tagged bindings, transitions on Laravel's event dispatcher, and Eloquent persistence for workflow state. Scope this as a small internal library project — not an integration task — with its own owner, CI, and versioning.
  3. Sidecar (fallback, discouraged). Containerize a Symfony 2.x service exposing the engine over HTTP and call it from Laravel. Technically feasible; introduces an EOL runtime into the operational estate for a niche capability. Poor trade.
  4. Direct adoption. Not viable in either framework direction.

Compatibility. Bundle registration requires the Symfony kernel; nothing in Laravel reads it. The idci/step-bundle pin drags the graph to legacy Symfony/PHP, which conflicts with current framework constraints. Any Laravel port must also redesign persistence from Doctrine ORM entities onto Eloquent, and add a cache layer over step resolution — the original has neither in a form we can reuse.

Sequencing. Gate behind a timeboxed spike of one to two weeks: confirm the step-bundle API surface from source, confirm license and platform constraints, and return a port estimate plus a substitute-vs-port recommendation. Run the spike before allocating any roadmap slot, and do not sequence it as a dependency for downstream work — plan on the substitution outcome so other teams are not blocked by it. If the spike is not funded, close the question now.

Operational Impact

Maintenance. Worst-case profile: abandoned upstream means every bug fix, security patch, and PHP-version compatibility change becomes ours. A fork implies pinned dependencies, an internal CI pipeline, a documented upgrade path, and a named owner — recurring cost disproportionate to a package with no external users or validation.

Support. No vendor SLA, no forum, no advisory feed; escalation is reading the source. Single-vendor provenance compounds continuity risk — if the repo is archived, the fork is the only artifact and institutional knowledge leaves with whoever built it.

Scaling. In the Symfony2 idiom, workflow state lives in Doctrine ORM entities, so throughput is bounded by the database and by how often step resolution queries it. Runtime path generation is the natural hotspot: resolving the path on every request without caching will surface first under load. Any port must consciously redesign persistence onto Eloquent and cache resolved paths per flow-definition version.

Failure modes to instrument for.

  • Silent step-generation errors — a misconfigured dynamic path yields a plausible-but-wrong flow that only fails at a late step, and is hard to reproduce because the path is computed at runtime. This is the highest-severity mode and argues for path-decision logging and replayable fixtures.
  • Composer resolution breakage on routine dependency updates.
  • PHP runtime upgrades breaking legacy syntax.
  • DI tag drift after a fork diverges from upstream.
  • Data-migration failure if workflow state is left in the legacy schema, blocking any eventual exit.

Ramp-up. Steep relative to package size: the team must absorb Symfony2 bundle idioms (kernel registration, compiler passes, tagged services) and reverse-engineer undocumented step-bundle contracts from source. Documentation is sparse to absent. Realistic budget: one to two engineer-weeks to fluency for a senior PHP engineer before any port work begins — hard to justify against substituting a documented, maintained component.

Decision requested. Approve the pattern (step registry + dynamic path resolver) as a design input; decline the package as a dependency in any form; fund the one-to-two-week spike only if a concrete sponsored use case exists; and confirm which team owns a shared flow engine if the roadmap contains more than one branching flow. Bottom line: preserve the requirement, not the package — document this as a substitution decision, not an open integration backlog item.

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.
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
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin