Configuration Schema
When to Use
When exporting/importing BEF configuration, creating custom widgets that need config schema, or debugging config validation errors.
Decision: Schema Files
| File | Defines |
|---|---|
config/schema/better_exposed_filters.exposed_form.schema.yml |
Top-level BEF config on Views exposed form |
config/schema/better_exposed_filters.filter.schema.yml |
Per-filter widget config schema |
config/schema/better_exposed_filters.sort.schema.yml |
Sort widget config schema |
config/schema/better_exposed_filters.pager.schema.yml |
Pager widget config schema |
Pattern: Config Structure in Views Export
BEF configuration lives inside the View's display options under exposed_form.options.bef:
display:
page_1:
display_options:
exposed_form:
type: bef
options:
bef:
general:
autosubmit: true
autosubmit_hide: true
allow_secondary: false
# ...
sort:
plugin_id: bef
# sort widget config...
pager:
plugin_id: default
filter:
field_category_target_id:
plugin_id: bef
select_all_none: true
display_inline: false
soft_limit: 10
advanced:
collapsible: false
is_secondary: false
# ...
Pattern: Dynamic Schema Resolution
BEF uses typed data schema with dynamic type resolution:
- better_exposed_filters.filter.[plugin_id] — resolves to the specific filter widget's schema
- better_exposed_filters.sort.[plugin_id] — resolves to the specific sort widget's schema
- better_exposed_filters.pager.[plugin_id] — resolves to the specific pager widget's schema
Pattern: Config Updater
BetterExposedFiltersConfigUpdater handles config migrations when new keys are added:
| Method | Migration |
|---|---|
updateCombineParam() |
Adds combine_param key (default: 'sort_bef_combine') |
updateSoftLimitParams() |
Adds soft_limit, soft_limit_label_less, soft_limit_label_more |
updateSingleCheckboxFilters() |
Adds treat_as_false (default: FALSE) |
updateAddOpenByDefaultKey() |
Adds open_by_default (default: FALSE) |
updateAddFieldClassesKey() |
Adds field_classes (default: '') |
Common Mistakes
- Config import fails — If you add a custom widget, you must add a matching config schema entry or config validation will fail on import.
- Missing keys after update — Run
drush updbto execute post_update hooks that add new config keys. - Schema mismatch — When copying config between sites with different BEF versions, check for missing keys. The config updater only runs during
drush updb, not on import.
See Also
- Custom Widget Plugins — schema for custom widgets
- Installation & Setup — initial configuration
- Reference:
web/modules/contrib/better_exposed_filters/config/schema/ - Reference:
web/modules/contrib/better_exposed_filters/src/BetterExposedFiltersConfigUpdater.php