qbbr/entity-hidden-type-bundle
Symfony bundle providing a hidden entity form type for Doctrine entities. Embed entity references as hidden fields and transform submitted IDs back into entities, making it easy to preserve related objects in forms without exposing a visible selector or extra UI.
Scope mismatch first: despite the brief framing this as a Laravel/PHP package, qbbr/entity-hidden-type-bundle is a Symfony 2 bundle. It is not a Laravel package, has no service provider, no facade, and no illuminate/* compatibility. Any Laravel leverage is conceptual (the pattern), not direct code reuse.
What it does: provides a Symfony form type that renders an entity as a hidden input — serializing the entity's identifier into the field and re-hydrating the entity on submit. Useful in Symfony 2-era forms where you wanted to pass a related record through a form without exposing a full entity choice widget.
Architecture fit: Poor. The value is a single small form-type class (~50–100 LOC equivalent). Laravel's form layer is Blade + Request validation + Eloquent binding; there is no FormType extension point to plug into. Reproducing the behavior natively is a hidden <input> plus an exists: validation rule plus an authorization check — a half-day of work at most.
Integration feasibility: Effectively zero as a dependency. Symfony 2 reached end-of-life in November 2018; its symfony/form and symfony/http-kernel constraints will conflict with any modern PHP/Laravel dependency graph. The bundle predates PSR-11 alignment, likely uses Symfony\Component\Form\AbstractType APIs that no longer exist, and installs on PHP 5.5–7.0-era toolchains.
Technical risk: Very high relative to negligible benefit:
Key questions to resolve before any further evaluation:
exists: rule + Gate/Policy check on the submitted ID? (Almost certainly yes.)Verdict: Recommend do not adopt. Reproduce the pattern natively; carry no dependency.
Stack fit: None directly. There is no adapter path from a Symfony 2 FormType bundle into Laravel's container, validation pipeline, or Blade rendering. Forcing it would mean pulling in a symfony/form component tree alongside Illuminate — a dependency-graph collision with no compensating benefit.
Migration path: There is nothing to migrate from. The correct path is a pattern port, not a code port:
exists:table,id (or a scoped Rule::exists(...)->where(...) to enforce tenancy/ownership).Policy/Gate check before resolving the model.Compatibility: The bundle's PHP and Symfony constraints are incompatible with any currently supported Laravel release (Laravel 10/11/12 require PHP 8.1+). Attempting to install it will either fail resolution or require --ignore-platform-reqs-style coercion, which is a red flag in itself.
Sequencing (if the team still wants to explore):
exists + policy validation; confirm it covers the use case.Maintenance: AdopTING this means owning it. There is no upstream. Any PHP or framework upgrade that touches the code path becomes our bug to fix, in code we did not write and cannot get support for. Carrying it also imposes a permanent "why is this here?" tax on every future engineer who reads composer.json.
Support: Zero. No maintainer activity, no issue tracker momentum, no community to escalate to. Internal Slack archaeology is the entire support model.
Scaling: Operationally trivial — it is a form type, not a service; negligible runtime cost. The scaling concern is not throughput, it is organizational: a dead dependency in the graph blocks or complicates future framework and PHP upgrades across the whole application, and that cost is paid by every team, not just the one that added it.
Failure modes:
Ramp-up: Learning the bundle's behavior is cheap; the expensive part is the archaeology — reconstructing intent, license provenance, and security posture for code nobody owns. Expect a day of diligence to arrive at the same place a half-day native implementation would have reached directly.
Bottom line for the roadmap: Reject the dependency; capture the pattern as a documented internal convention with validation and authorization baked in. Net effort saved versus adoption: roughly one day of integration and an unbounded future maintenance liability.
How can I help you explore Laravel packages today?