alamirault/elasticsearch-form-bundle
Illuminate\Support\Facades\Form, Collective\Html) and DI container (Illuminate\Container\Container) are incompatible with Symfony’s FormBuilderInterface and OptionsResolver.ruflin/elastica (v6.1), which is Elasticsearch-agnostic but requires manual mapping to Laravel’s Eloquent/Query Builder. No native Laravel ORM integration (e.g., Scout or Laravel Elasticsearch packages).Query\Match/Wildcard directly, which may overwhelm Laravel devs unfamiliar with Elasticsearch’s query syntax. Laravel’s typical search patterns (e.g., where(), orWhere()) differ significantly.FormRequest, ValidatesRequest) vs. Symfony’s builder pattern. Replicating elastic_filter_condition would require:
ElasticsearchMaker service to translate form data to Elasticsearch queries.ruflin/elastica (v6.1) may conflict with Laravel’s elasticsearch/elasticsearch (v7+).Serializer component is unused in Laravel (replaced by Illuminate\Support\Serializer or spatie/array-to-object).Elastic\Laravel\Index). Would need custom logic for:
users_2023).php artisan elastic:mappings).FormRequest events).ElasticsearchMaker as a Laravel service provider.ElasticQueryBuilder).FormTestCase won’t apply. Would need:
Illuminate\Http\Request for form submission tests.docker/elasticsearch).elastica in Laravel’s process model (vs. Symfony’s PSR-15 middleware).Why Elasticsearch?
Form Complexity
FormBuilder handles this natively; Laravel would need custom JS.Team Skills
Alternatives
App\Services\ElasticQuery) without tying to forms.Long-Term Maintenance
elastica v7+ that would require updates?Livewire (for reactive forms) + custom Elasticsearch logic, or Filament/Nova for admin panels.Laravel Scout (supports Elasticsearch) or Meilisearch for simpler setups.CompilerPass for bundle integration.elasticsearch/elasticsearch PHP client (v7+) directly with a custom query builder.elastica in a Laravel service (e.g., ElasticsearchRepository) to abstract queries.Elastic::search($query)).Assess Current Search:
DB::query(), Scout queries) to identify Elasticsearch candidates.php artisan make:elasticsearch-mapping User).Phase 1: Query Layer
Elastic::index($model)).Elastic::search($query)).// app/Services/ElasticsearchService.php
class ElasticsearchService {
public function search(array $query, string $index): array {
$client = Elastic\Clients\PredisClientBuilder::create()->build();
return $client->search($query, $index);
}
}
Phase 2: Form Integration (Optional)
// app/Listeners/ElasticsearchFormListener.php
public function handle(Request $request, Closure $next) {
$query = $this->buildElasticQuery($request->all());
$results = Elastic::search($query, 'users');
$request->merge(['elasticsearch_results' => $results]);
return $next($request);
}
EventServiceProvider:
protected $listen = [
'Illuminate\Http\Request' => [
ElasticsearchFormListener::class,
],
];
Phase 3: Bundle Adaptation (High Effort)
FormBuilderInterface with Laravel’s FormRequest.OptionsResolver with Laravel’s Arrayable.ElasticsearchMaker with a Laravel service.| Symfony Feature | Laravel Equivalent | Compatibility Risk |
|---|---|---|
FormBuilderInterface |
FormRequest + ValidatesRequest |
High (different paradigms) |
OptionsResolver |
Arrayable/Jsonable |
Medium (manual mapping needed) |
Serializer |
JsonResponse/spatie/array-to-object |
High (no direct replacement) |
YAML config |
.env + config/elasticsearch.php |
Low (simple migration) |
Elastica (v6.1) |
elasticsearch/elasticsearch (v7+) |
Medium (API changes) |
Livewire + custom Elasticsearch logic.elastica (v6.1) is abandoned (last update: 2019). Upgrading to v7+ may break the bundle.symfony/form, symfony/serializer) are unused in Laravel, increasing maintenance overheadHow can I help you explore Laravel packages today?