public function register(Application $app) { $app['lexik_form_filter.query_builder_updater'] = $app->share(function ($app) { $frmDataExt = $app['lexik_form_filter.form_data_extractor']; $dispatcher = $app['dispatcher']; return new FilterBuilderUpdater($frmDataExt, $dispatcher); }); $app['lexik_form_filter.form_data_extractor'] = $app->share(function ($app) { $formDataExtractor = new FormDataExtractor(); $formDataExtractor->addMethod(new DefaultExtractionMethod()); $formDataExtractor->addMethod(new TextExtractionMethod()); $formDataExtractor->addMethod(new ValueKeysExtractionMethod()); if ($app->offsetExists('form-filter.data_extraction_methods')) { foreach ($app['form-filter.data_extraction_methods'] as $extMethod) { $formDataExtractor->addMethod($extMethod); } } return $formDataExtractor; }); $app['form.extensions'] = $app->share($app->extend('form.extensions', function ($extensions) use($app) { $extensions[] = new FilterExtension(); return $extensions; })); $app['dispatcher']->addListener(FilterEvents::PREPARE, array(new PrepareListener(), 'onFilterBuilderPrepare')); $app['dispatcher']->addSubscriber(new DoctrineSubscriber()); }
/** * @param Container $app */ public function register(Container $app) { if (!isset($app['form.factory'])) { throw new \LogicException('You must register the FormServiceProvider to use the FormFilterServiceProvider.'); } $app['lexik_form_filter.query_builder_updater'] = function () use($app) { return new FilterBuilderUpdater($app['lexik_form_filter.form_data_extractor'], $app['dispatcher']); }; // Alias $app['form_filter'] = function () use($app) { return $app['lexik_form_filter.query_builder_updater']; }; // Filter Types $app['form.types'] = $app->extend('form.types', function ($types) use($app) { $types = array_merge($types, [new Type\TextFilterType(), new Type\NumberFilterType(), new Type\NumberRangeFilterType(), new Type\CheckboxFilterType(), new Type\BooleanFilterType(), new Type\ChoiceFilterType(), new Type\DateFilterType(), new Type\DateRangeFilterType(), new Type\DateTimeFilterType(), new Type\DateTimeRangeFilterType(), new Type\CollectionAdapterFilterType(), new Type\SharedableFilterType()]); if (isset($app['doctrine'])) { $types[] = new Type\EntityFilterType($app['doctrine']); } return $types; }); // Type extension $app['form.type.extensions'] = $app->extend('form.type.extensions', function ($extensions) { $extensions[] = new FilterTypeExtension(); return $extensions; }); // Form data extraction $app['lexik_form_filter.form_data_extractor'] = function () { $extractor = new FormDataExtractor(); $extractor->addMethod(new DefaultExtractionMethod()); $extractor->addMethod(new TextExtractionMethod()); $extractor->addMethod(new ValueKeysExtractionMethod()); return $extractor; }; $app['lexik_form_filter.filter_prepare'] = function () { return new PrepareListener(); }; // Subscriber to get filter condition $app['lexik_form_filter.get_filter.doctrine_orm'] = function () { return new DoctrineORMSubscriber(); }; $app['lexik_form_filter.get_filter.doctrine_dbal'] = function () { return new DoctrineDBALSubscriber(); }; // Listener to apply filter conditions $app['lexik_form_filter.apply_filter.doctrine_orm'] = function () { return new DoctrineApplyFilterListener(null); }; $app['lexik_form_filter.apply_filter.doctrine_dbal'] = function () { return new DoctrineApplyFilterListener(null); }; }