forci/menu-builder-api-bundle
Symfony bundle that exposes API endpoints for the Forci Menu Builder, enabling programmatic creation, retrieval, update, and deletion of menus and menu items. Add a ready-made menu management API layer to your application.
Architecture fit — framework mismatch is the headline. Despite being scoped in a Laravel/PHP package review, forci/menu-builder-api-bundle is a Symfony bundle (the -bundle suffix is Symfony's extension mechanism: a Bundle subclass registered via config/bundles.php, plus a DI Extension). Laravel has no bundle system; it boots through service providers and its own container. There is no evidence of a Laravel service provider, facade, or config stub. The useful asset is the data model and JSON API contract for hierarchical menus (items, nesting, ordering, visibility) — the Symfony wiring is incidental. A TPM should frame this as a reference implementation to harvest, not a dependency to install.
Integration feasibility — low as-is, moderate with extraction. Three paths, descending in effort-to-value:
forci/menu-builder core (likely, given the -api-bundle split), depend on that and rebuild routes/controllers/persistence in Laravel. Cleanest long-term path.Technical risk — high and compounding. Four independent factors stack: zero stars, zero dependents (no production validation, no community regression safety net); NOASSERTION license (unclassified, could be non-permissive — a legal hard-stop until counsel reviews LICENSE/composer.json; do not assume MIT); single-vendor origin ("forci") with no visible cadence, CI, or test suite implied; and framework mismatch, which makes every integration bug ours to diagnose against unfamiliar Symfony internals.
Key questions to answer before any engineering spend:
Stack fit — mismatch by design. Expect required dependencies on symfony/framework-bundle, likely doctrine/orm, possibly api-platform/core and symfony/serializer. Laravel ships Eloquent and its own HTTP kernel; Doctrine and API Platform are not native. Composer may resolve the graph, but the bundle will never register. Budget for an adapter layer or a separate service — never a one-line composer require.
Migration path — discovery first, decision second, build third:
Compatibility. Treat PHP and Symfony version constraints as hard inputs; a pinned older Symfony minor becomes a ceiling in the standalone-service path. PSR-7/PSR-15 compliance would ease Laravel-side consumption; absent it, write a client wrapper. Schema ownership is the sleeper issue — Doctrine migrations do not map cleanly onto Laravel's migration runner; assign ownership explicitly (service owns its tables, Laravel does not migrate them).
Sequencing — start with the seam, not the feature. Confirm API contract, auth model, and schema first, then build one vertical slice end to end (list menus → render in Laravel). Expand only after the seam is proven. Scope an in-house fallback in parallel so schedule does not hinge on the spike.
Maintenance — adoption means becoming the maintainer. With zero dependents and a single vendor, there is no upstream safety net. Patching, security response, and PHP-version upgrades become internal obligations. This is not a "set and forget" dependency; budget ongoing ownership.
Support. No community forum, no visible issue triage, no SLA. Escalation is the vendor directly or the source code. For a Laravel team, internal Symfony fluency is the support contract — confirm it exists before committing.
Scaling. The API surface is presumably stateless and horizontally scalable, but the bottleneck is the datastore behind the menu hierarchy — recursive queries on nested sets or adjacency lists degrade with depth and breadth. Query patterns are unknown, so the scaling profile is unknown; benchmark the menu-read path early, since it is likely the hot path on every page render.
Failure modes to design against:
Ramp-up. Two costs: Symfony fluency for whoever runs the service, and domain-model onboarding for whoever consumes it. Estimate 1–2 weeks for a mid-level engineer to be productive in the standalone-service path; longer if extraction is chosen and Doctrine patterns must be translated to Eloquent. Zero adoption means no tutorials, no Stack Overflow answers, no community examples — onboarding is source-reading only.
TPM recommendation. Do not treat this as a Laravel dependency — it is not one. Fund a one-week spike gated on license clearance; the most probable outcome is to harvest the data model and API contract and build a small Laravel-native equivalent, unless the vendor confirms an actively maintained, permissively licensed, framework-agnostic core. At 0 stars, 0 dependents, and an undetermined license, the default answer is "reference, not dependency." Record the decision as triage — spike, fork under legal review, or deprioritize — not as a build commitment.
How can I help you explore Laravel packages today?