rz/field-type-bundle
rz/field-type-bundle is a PHP package for organizing reusable field type definitions in your applications. It helps centralize field metadata and rendering logic so forms and content models stay consistent, easier to maintain, and simpler to extend as your project grows.
Architecture fit — none. rz/field-type-bundle is not a Laravel package; it is a Symfony 2 bundle. Its integration contract is the Symfony full-stack kernel: registration in AppKernel, a DependencyInjection/*Extension.php with a Configuration tree, service definitions in YAML/XML, and consumption of Symfony 2.x components (HttpKernel, DependencyInjection, Form, EventDispatcher). Laravel has no bundle concept — its closest analogue is a ServiceProvider with a deferred register()/boot() lifecycle, which is a different contract with different discovery and config semantics. There is no adapter layer that makes a bundle load in Laravel without reimplementing it.
Integration feasibility — effectively zero as a dependency, low as a fork. Any Laravel version on a supported PHP runtime (8.1+) resolves Symfony ^6/^7 components or none of the full-stack ones. A bundle pinned to Symfony 2.x creates an unresolvable Composer graph; even if forced, the DI container and kernel bootstrapping will not run inside Laravel's Application. The only viable path is source-level reuse: read the code, extract the domain rules, and rebuild them natively.
Technical risk — high and asymmetric. The signal here is the whole signal: archived, 0 stars, 0 dependents, no maintainer. That means no issue triage, no security patching, no upgrade path, and no downstream usage to learn from when something breaks. Concretely, expect:
each(), dynamic properties, implicit nullable params) that fatal or deprecate on PHP 8.Key questions to answer before any decision:
Form events?symfony/* and php version constraints in composer.json, and what does the license permit?Assessment: do not adopt. Treat the repository as a reference implementation only.
Stack fit — no direct fit; conceptual fit is good. The concept (a pluggable field-type registry: each type defines a key, validation rules, normalization, and a renderer) maps cleanly onto idiomatic Laravel:
| Symfony 2 bundle concept | Laravel equivalent |
|---|---|
Bundle + Extension + Configuration tree |
ServiceProvider + config/field_types.php |
Tagged services (kernel.event_listener, custom tags) |
Container bindings + a FieldTypeRegistry singleton, or a Manager/driver pattern |
| Form type + Twig block | FieldType contract + Blade component / view per type |
| Form constraints | Laravel Validator rule objects or Rule:: composition |
| Doctrine type | Eloquent Attribute cast or custom CastsAttributes |
Migration path (reference-port, not lift-and-shift):
filament/forms, spatie/laravel-data + validation, novius/laravel-form-builder, or a straightforward custom registry. Most "field type" bundles reduce to a config array plus a validator plus a Blade partial; rebuilding is usually smaller than porting.FieldType interface, FieldTypeRegistry, config-driven registration, Manager-style extend()), then validation, then rendering, then persistence casts.Compatibility: no Composer install path into any supported Laravel (9/10/11/12) or supported Symfony (5.4+/6/7). Running it at all implies a legacy PHP 5.6–7.0 process on an EOL Symfony — that is a compliance and security blocker independent of functionality.
Sequencing: audit → decision gate → alternative evaluation → (build: contract → registry → validation → rendering → migration) → decommission the reference. Do not open a branch that vendors the bundle "temporarily"; temporary forks of archived bundles become permanent.
Maintenance — full ownership on day one. Archived with no maintainer means every defect, security advisory, and PHP upgrade is yours. Cost is not the initial port; it is the ongoing tax of a codebase with no upstream. If the team vendors the code, budget it as first-party with a named owner and a review cadence.
Support — none external. No vendor, no maintainer, no community footprint (0 stars, 0 dependents implies essentially no Stack Overflow or issue history to search). Internal documentation of the extracted spec becomes the only support artifact — which is another argument for extracting the spec rather than the code.
Scaling — the wrong axis is at risk. A field-type registry is in-process, config-driven, and trivially cheap; throughput is not the concern. The scaling concern is the runtime: if the only way to execute this code is a PHP 5.6/Symfony 2 process, you are horizontally scaling an EOL runtime that can't receive security patches and can't run modern observability or container base images.
Failure modes to plan for:
require (most likely outcome) — fails fast and safely.Ramp-up — moderate and shrinking. Symfony 2 bundle conventions (tagged services, compiler passes, config trees) are increasingly unfamiliar to engineers working in modern Laravel, and the idioms don't transfer. Realistic estimate for a small team: 1–2 sprints to audit, extract, and rebuild as a native package with tests — less if the capability is genuinely just a type registry, more if persistence and rendering are entangled. Compare that against the near-zero cost of adopting a maintained Laravel form/field library.
Recommendation: reject as a dependency, preserve as a reference, and reimplement the small useful core natively if the capability is actually needed.
How can I help you explore Laravel packages today?