Composable UI troubleshooting
Edit on GitHubThis document provides solutions for common issues when developing Composable UI modules.
Module doesn’t appear in navigation
Problem: After completing all steps, your module is not visible in the Back Office navigation menu.
Solutions:
-
Check navigation.xml registration:
-
Verify
config/Zed/navigation.xmlcontains your module entry -
Ensure
bundle,controller, andactionare set correctly:<bundle>falcon-ui</bundle> <controller>feature</controller> <action>index</action>
-
-
Rebuild navigation cache:
docker/sdk cli console navigation:build-cache -
Clear all caches:
docker/sdk cli console cache:empty-all -
Check ACL permissions:
- Log in to Back Office as admin user
- Navigate to Users → Roles
- Verify your role has access to the module
Table shows “No data” or empty
Problem: The table loads but shows no data or “No data available” message.
Solutions:
-
Check API endpoint is accessible:
curl -X GET http://glue-backend.your-domain.local/your-entities \ -H "Authorization: Bearer YOUR_TOKEN"- Should return JSON with data or empty array
- If 404: API resource not registered correctly
- If 401: Authentication issue
-
Verify Provider is registered:
- Check
resources/api/backend/your_entities.resource.ymlhas correctproviderclass - Ensure Provider class exists and extends
AbstractBackendProvider
- Check
-
Check database has data:
- Verify your database table contains records
- Check Provider’s
fetchAllItems()orprovideCollection()returns data
-
Regenerate API resources:
docker/sdk cli glue api:generate backend docker/sdk cli console transfer:generate
Forms don’t submit or show errors
Problem: Create/Edit forms don’t work, show validation errors, or fail silently.
Solutions:
-
Check Processor registration:
- Verify
resources/api/backend/your_entities.resource.ymlhas Processor classes for POST/PATCH operations - Ensure Processor classes exist and implement
ProcessorInterface
- Verify
-
Check validation rules:
- Review
resources/api/backend/your_entities.validation.yml - Ensure required fields match form configuration
- Review
-
Check API endpoint URLs:
- In entity YAML, verify form
submit.urlmatches API resource path - For edit/delete: ensure URL includes identifier, for example,
/your-entities/${row.reference}
- In entity YAML, verify form
-
Check browser console for errors:
- Open browser DevTools → Console tab
- Look for API request errors (401, 403, 422, 500)
- Check Network tab for failed requests
Filters or search don’t work
Problem: Table filters or search box don’t filter results.
Solutions:
-
Verify field configuration in entity YAML:
fields: name: searchable: true # For search status: filterable: true # For filters -
Check Provider implementation:
AbstractBackendProviderautomatically handles search/filtering- Ensure your Provider extends
AbstractBackendProvider, not a custom implementation
-
Verify database query supports filtering:
- Check Facade methods handle filter parameters
- Ensure database columns are indexed for performance
Page shows blank or crashes
Problem: Navigating to the module shows a blank page or error.
Solutions:
-
Check browser console for JavaScript errors:
- Open DevTools → Console
- Look for module loading errors or syntax errors in YAML
-
Verify entity YAML syntax:
- Check for YAML indentation errors
- Validate all
use:references point to existing component IDs - Ensure all required properties are present
-
Rebuild Falcon UI:
npm run falcon:install && npm run falcon:build -
Check feature registration:
- Verify
.spryker/features.ymlcontains your module - Ensure
resources/{your-module}.ymlexists with correctfeatureandentitiesproperties
- Verify
Changes to YAML don’t appear
Problem: After modifying entity YAML configuration, changes don’t reflect in the UI.
Solutions:
-
Clear all caches:
docker/sdk cli console cache:empty-all docker/sdk cli glue cache:clear -
Rebuild Falcon UI (for UI changes):
npm run falcon:build -
Hard refresh browser:
- Press
Ctrl+Shift+R(Windows/Linux) orCmd+Shift+R(Mac) - Or clear browser cache
- Press
CRUD mode: Auto-generation doesn’t work
Problem: Using CRUD mode with fields and ui.list/create/edit configuration, but components are not auto-generated.
Solutions:
-
Verify CRUD mode is active:
- Ensure you have
fields:section defined - Ensure you have
ui.list,ui.create, orui.editsections - If you have
ui.mode: custom, remove it or change toui.mode: crud
- Ensure you have
-
Check field definitions:
fields: email: type: email required: true- All fields referenced in
ui.list.columnsorui.create.fieldsmust be defined
- All fields referenced in
-
Clear caches and rebuild:
docker/sdk cli console cache:empty-all npm run falcon:build
Partial override doesn’t merge correctly
Problem: Using view.components to override auto-generated components, but overrides don’t apply or replace entire component.
Solutions:
-
Use correct component ID:
- For CRUD mode, component IDs follow pattern:
table.{Entity}.list,form.{Entity}.create - Entity name must match exactly (case-sensitive)
- Example:
table.Customer.listfor Customer entity
- For CRUD mode, component IDs follow pattern:
-
Deep merge structure:
view: components: table.customer.list: pagination: [10, 25, 50] # Only overrides pagination- Only specified properties are overridden
- Parent properties remain auto-generated
-
Clear caches after changes:
docker/sdk cli console cache:empty-all npm run falcon:build
API returns 401 Unauthorized
Problem: API requests return 401 Unauthorized error.
Solutions:
-
Check resource security configuration:
resource: security: "is_granted('IS_AUTHENTICATED_FULLY')"- Ensure this is set for protected endpoints
-
Verify OAuth token generation:
- Check
SecurityGuiConfig::IS_ACCESS_TOKEN_GENERATION_ON_LOGIN_ENABLED = true - See Install Composable UI
- Check
-
Test authentication:
- Log out and log back into Back Office
- Check browser DevTools → Application → Local Storage for access token
Reference data endpoint returns wrong format
Problem: Filter datasource endpoint returns data but filters don’t populate.
Solutions:
-
Verify resource properties match filter configuration:
# Filter expects these field names datasource: url: /salutations valueField: value # Must match resource property titleField: title # Must match resource property # Resource must have matching properties properties: value: type: string title: type: string -
Check Provider returns correct structure:
yield SalutationsBackendResource::fromArray([ 'value' => 'mr', 'title' => 'Mr.', ]);
Need more help
If your issue is not listed here:
- Check browser DevTools Console and Network tabs for errors
- Review Entity configuration reference for correct YAML syntax
- Consult API Platform troubleshooting for API-specific issues
- Review Composable UI best practices for implementation patterns
Thank you!
For submitting the form