| Choose between FormBase and ListBuilder |
FormBase vs ListBuilder |
Use FormBase/ConfigFormBase when building settings pages or custom admin forms. Use ListBuilder when displaying entity collections with standard CRUD operations. |
| Create a configuration settings form |
ConfigFormBase Pattern |
Use ConfigFormBase when building a module settings page that stores configuration in the config system (database + YML export). |
| Build a custom admin table/form |
FormBase Pattern |
Use FormBase when building custom admin forms that don't fit ConfigFormBase (bulk operations, complex workflows, non-config data). |
| Create an entity collection list |
ListBuilder Pattern |
Use ListBuilder when building entity collection admin pages with standard CRUD operations. |
| Implement dropbutton operations |
Operations Implementation |
Use #type operations when adding action links (Edit, Delete, etc.) to table rows in FormBase or customizing operations in ListBuilder. |
| Define configuration schema |
Configuration Schema |
Use configuration schema when defining structure and validation constraints for configuration stored by ConfigFormBase. |
| Use dependency injection in forms |
Dependency Injection |
Use dependency injection when forms need services (config factory, entity type manager, database, custom services). |
| Secure configuration forms |
Security Best Practices |
All configuration forms must follow security best practices to prevent vulnerabilities. |
| Optimize form performance |
Performance Best Practices |
Optimize configuration forms to avoid performance bottlenecks, especially forms with many operations or large datasets. |
| Avoid common mistakes |
Common Mistakes |
Reference when debugging form issues or reviewing code. |