fire1 / ax-form-bundle
Symfony bundle for building AJAX-powered Bootstrap 5.3/jQuery modals forms with ease.
1.2.1
2026-04-20 05:20 UTC
Requires
- php: >=8.2
- doctrine/doctrine-bundle: ^2.8
- doctrine/orm: ^2.14|^3.0
- symfony/framework-bundle: ^5.4|^6.0|^7.0
- symfony/twig-bundle: ^5.4|^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^10.0
README
AxFormBundle makes it easy to open your Symfony forms in Bootstrap 5.3 modals using AJAX. It handles all the "boring" parts—like page reloads and error messages—so you don't have to write custom JavaScript. It’s the simplest way to turn your Symfony forms into fast pop-ups with almost no extra code.
Features
- Fluent AxFormService: A clean API for handling entity creation and modification within modals (requires Doctrine and Symfony Form).
- AxStepsService: Session-based orchestrator for complex multi-step form workflows.
- AbstractAxFormController: Base controller with built-in helpers for modal initialization and entity deletion.
- Twig Integration: Custom functions for rendering modal triggers and the required container structure.
- Bootstrap 5 Support: Out-of-the-box templates compatible with Bootstrap 5.
- Portable Assets: Includes a standalone npm package
@fire1/ax-formwith Vue 3 components.
Requirements
- PHP 8.2 or higher
- Symfony 5.4, 6.x, or 7.x
- Doctrine ORM (for
AxFormServiceentity persistence) - Symfony Form Component (for form handling)
- Twig Bundle (for rendering)
Documentation
Full documentation is available in the docs folder:
Quick Installation
composer require fire1/ax-form-bundle
Register the bundle in config/bundles.php:
return [ // ... Fire1\AxFormBundle\Fire1AxFormBundle::class => ['all' => true], ];
Ensure you have the required modal structure in your base layout:
{{ ax_form_modal() }}
Basic Usage Example
// In a Controller extending AbstractAxFormController public function new(): Response { $form = $this->formPage(Task::class, 'task'); return $form ->title('Create New Task') ->do(TaskType::class, function (Task $task, AxFormService $form) { $form->record(); return $form->redirectByReferer(); }); }