presta/cms-faq-bundle
PrestaCMS FAQ Bundle adds FAQ management to Symfony/PrestaCMS sites: create categorized questions and answers with ordering, admin CRUD screens, and ready-to-render frontend templates for help and support pages.
Architecture fit — poor, effectively none for a Laravel codebase. Despite being catalogued alongside PHP packages, presta/cms-faq-bundle is a Symfony 2 bundle, not a Laravel package. It has no service provider, no facade, no config publishing, and no awareness of the Laravel container. Its architecture is PrestaCMS-specific: FAQ content is modelled as Doctrine entities (categories containing questions/answers) and managed through SonataAdminBundle CRUD screens, then surfaced through PrestaCMS page blocks. Adopting it in Laravel would mean adopting Symfony 2's bundle/kernel conventions, Sonata's admin stack, and PrestaCMS's block rendering model — three frameworks to serve one small content type.
Integration feasibility — not feasible in the target stack. The realistic failure point is Composer resolution: Sonata Admin and its Symfony 2-era dependencies pin symfony/form, symfony/http-foundation, symfony/event-dispatcher and doctrine/* versions that directly conflict with illuminate/*. Even with --ignore-platform-reqs gymnastics, you would be loading two competing HTTP kernels, two form components, and two event dispatchers into one process. There is no supported coexistence story.
Technical risk — high and compounding.
Key questions
Verdict: reject as a dependency. The only defensible use is as a reference implementation for schema shape and admin field layout.
Stack fit — none. PrestaCMS + SonataAdmin is a Symfony 2 world. A Laravel application has no seam to attach to: no bundle registration, no Twig block pipeline, no Sonata admin pool, no Doctrine entity manager shared with Eloquent. Treat this as cross-framework, not cross-package.
Migration path — content out, not code in. If FAQ content exists in a live PrestaCMS instance, the viable path is data extraction, not integration:
faq, faq_category, translation tables) and block configuration referencing them.faq_categories and faqs with a foreign key, position column for ordering, published_at for state, and a locale column or translations table if multilingual.Compatibility — the decisive constraint. PHP 5.3/5.4-era code will fatal on PHP 8.x (removed each(), reserved words, dynamic properties, old Doctrine proxy signatures). Symfony 2 is end-of-life. There is no supported matrix in which this runs alongside a current Laravel release. Any attempt at compatibility is a fork-and-rewrite, at which point you have written the feature yourself with extra steps.
Sequencing (recommended):
| Phase | Work | Effort |
|---|---|---|
| 1 | Confirm content model and locale requirements with stakeholders | 1–2 days |
| 2 | Decide build vs. adopt a maintained Laravel-native FAQ package | 1 day |
| 3 | Implement schema, models, admin CRUD, public read endpoints | 2–4 days |
| 4 | Migrate legacy content (if any) and redirect URLs | 1–3 days |
| 5 | Decommission the bundle; close out the dependency request | 0.5 day |
Note that steps 3–4 are cheaper than the evaluation and security review required to justify the bundle.
Maintenance — worst case. Archived, unmaintained, and pinned to a dead framework generation. Every future PHP runtime upgrade, every Laravel major, and every transitive security advisory becomes a manual triage item against code with no upstream. This is a permanent maintenance tax on a feature that should be near-zero-cost.
Support — none. No maintainer, no issue triage, no security disclosure channel, no dependents to consult. Internal engineers would be reverse-engineering 2014 Symfony idioms from source. Expect the "how do we fix this" question to land on whoever approved the dependency.
Scaling — limited but largely irrelevant. A FAQ is a read-heavy, low-write, cacheable dataset; the package's ORM-and-render-per-request model is not a scaling concern at any realistic volume. The real scaling risk is organisational: a second framework runtime, a second admin auth surface, a second deployment unit, and a second upgrade cadence — all for one content type.
Failure modes to expect
Ramp-up — steep and unrewarding. Realistic onboarding for a mid-level Laravel engineer: 2–3 weeks to become productive in Symfony 2 bundle conventions, Sonata Admin, PrestaCMS blocks, and Doctrine 2 — none of which transfers to the rest of the stack. Contrast with under a day for a Laravel engineer to read and extend a native FAQ module they or a colleague wrote. The ramp-up cost alone exceeds the entire build cost of the replacement.
Recommendation. Decline the dependency. Build the FAQ natively in Laravel (2–4 engineer-days) or adopt an actively maintained Laravel package. If legacy PrestaCMS content exists, fund a one-off export/import rather than an integration. Record the decision so the same archived package is not re-evaluated on the next request — the star count, dependent count, last-release date, and archive status are sufficient signal on their own.
How can I help you explore Laravel packages today?