egeloen/ordered-form
Symfony2 form extension that lets you control field order via a "position" option. Place fields first, last, or relative to others using before/after rules for predictable, readable form layouts.
Form facade or third-party packages like laravelcollective/html).FormFactory or FormType system, requiring abstraction layers (e.g., wrappers or adapters) to integrate this package.Form::macro() or FormRequest) into Symfony’s FormType interface. Potential candidates:
FormBuilder to delegate ordering logic to this package.Session or Cache) may be needed to sync positions.FormType extensions, increasing risk of edge cases (e.g., nested forms, dynamic fields).before/after + first/last rules (may require custom FormOrderer).before/after handling (e.g., bidirectional dependencies).laravel-form-components) that could conflict?Form::macro + manual sorting) or packages like spatie/laravel-form-builder achieve the same goal with lower risk?illuminate/support for service providers.laravel/framework for form request handling.FormFactory and OrderedExtension.// app/Providers/FormServiceProvider.php
use Ivory\OrderedForm\OrderedResolvedFormTypeFactory;
use Ivory\OrderedForm\Extension\OrderedExtension;
use Symfony\Component\Form\Forms;
class FormServiceProvider extends ServiceProvider {
public function register() {
$this->app->singleton('ordered.form.factory', function () {
return Forms::createFormFactoryBuilder()
->setResolvedTypeFactory(new OrderedResolvedFormTypeFactory())
->addExtension(new OrderedExtension())
->getFormFactory();
});
}
}
FormBuilder to use the Symfony factory:
// app/Extensions/LaravelOrderedFormBuilder.php
use Symfony\Component\Form\FormInterface;
class LaravelOrderedFormBuilder extends \Illuminate\Support\Facades\Form {
public static function orderedBuilder() {
$factory = app('ordered.form.factory');
return new static($factory->createNamedBuilder(...));
}
}
Form::macro() calls with the ordered builder where needed.// Before
Form::macro('dynamic', function () { ... });
// After
LaravelOrderedFormBuilder::orderedBuilder()->macro('dynamic', function () { ... });
symfony/form dependency matches the package’s requirements (e.g., Symfony 5.x).{{ Form::open() }}; ordering happens at the FormView level.composer require egeloen/ordered-form symfony/form:^5.4
FormInterface).egeloen/ordered-form and symfony/form for breaking changes.FormType system.FormView if forms are static.| Scenario | Impact | Mitigation |
|---|---|---|
| Symfony version mismatch | Forms render incorrectly | Pin symfony/form version in composer.json |
Circular before/after rules |
Infinite loop in ordering | Add validation in FormOrderer |
| Laravel form macro conflicts | Overrides break ordered forms | Isolate ordered forms in namespaces |
| Database session corruption | Form positions lost | Use Redis for session storage |
position options (e.g., first, after:field_name).How can I help you explore Laravel packages today?