laravel/form), direct integration requires adaptation (e.g., Symfony’s FormBuilder vs. Laravel’s FormRequest/Form facade).Request filtering, QueryBuilder extensions) or packages like spatie/laravel-query-builder may offer tighter integration.doctrine/dbal or illuminate/database. If using Eloquent, additional abstraction layers (e.g., custom query builders) would be needed.Form and Validator components, which are not natively available in Laravel. Workarounds:
symfony/form, symfony/validator) via Composer.FormType/Filter logic into Laravel’s FormRequest or Builder patterns.EventDispatcher. Laravel’s Events system is similar but not identical; mapping would be required.SpiriitLabs/form-filter-bundle). Bug fixes or updates would require forking or relying on community patches.Request filtering or packages like beberlei/doctrineextensions).Why Laravel?
spatie/laravel-query-builder, archtechx/boom)?Scope of Integration
AppServiceProvider, FormRequest) that could be incrementally migrated?Long-Term Viability
SpiriitLabs/form-filter-bundle)?Performance Requirements
Team Expertise
Laravel Compatibility Matrix:
| Component | Laravel Native Equivalent | Workaround Needed |
|---|---|---|
Symfony Form |
Illuminate\Http\Request |
Custom wrapper or symfony/form |
Symfony Validator |
Illuminate/Validation |
symfony/validator or laravel/validator |
| Doctrine DQL | Eloquent Query Builder | Custom translator or raw Doctrine |
| EventDispatcher | Laravel Events |
Minimal mapping (e.g., dispatch()) |
Recommended Stack:
symfony/form, symfony/validator) via Composer, but expect higher maintenance.Request + Query Builder to mimic the bundle’s filtering logic.Assessment Phase:
FormRequest, Controller methods, or custom query scopes).Proof of Concept (PoC):
Request filtering).Incremental Rollout:
where('status', $request->status)) with the bundle’s logic.FilterableController trait).Fallback Plan:
Request + Query Builder.FormRequest).Validator is stricter than Laravel’s. Test edge cases (e.g., custom constraints, nested objects).App::setLocale() aligns with Symfony’s Translator.Dependency Setup:
composer require symfony/form symfony/validator symfony/event-dispatcher
QueryBuilder to Laravel’s.Core Integration:
// app/Providers/FormFilterServiceProvider.php
use Symfony\Component\Form\FormFactory;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class FormFilterServiceProvider extends ServiceProvider {
public function register() {
$this->app->singleton(FormFactory::class, fn() => new FormFactoryBuilder()->build());
$this->app->singleton(ValidatorInterface::class, fn() => new Validator());
}
}
Filter Definition:
FormType classes (adapted for Laravel).// app/Form/Filter/UserFilterType.php
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class UserFilterType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('name', TextType::class)
->add('status', ChoiceType::class, ['choices' => ['active', 'inactive']]);
}
}
Query Integration:
// app/Services/FilterQueryBuilder.php
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormInterface;
class FilterQueryBuilder {
public function buildQuery(QueryBuilder $qb, FormInterface $form) {
// Custom logic to apply filters to $qb
}
}
Controller Usage:
// app/Http
How can I help you explore Laravel packages today?