Composable UI troubleshooting
Edit on GitHubComposable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release.
This 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