Installation Add the bundle to your Laravel project via Composer:
composer require sylius/ui-bundle
Register the bundle in config/app.php under providers and aliases (if using Sylius components).
First Use Case Use the bundle to scaffold a basic UI component (e.g., a product grid or cart summary) by leveraging Sylius’ Twig templates and Symfony UX components. Example:
{% include '@SyliusUi/Component/product-grid.html.twig' %}
vendor/sylius/ui-bundle/resources/views/ (Twig templates)config/packages/sylius_ui.yaml (default configuration)Prerequisites Ensure your project uses:
twigbridge).Reuse Sylius UI Components: Leverage pre-built components like:
product-grid (for catalogs)cart-summary (for checkout)order-history (for customer accounts){% extends '@SyliusUi/base.html.twig' %}
{% block body %}
{{ include('@SyliusUi/Component/cart-summary.html.twig') }}
{% endblock %}
Customize Components:
Override templates by copying them to templates/SyliusUi/Component/ (Laravel’s resources/views/).
Example: Modify product-grid.html.twig to add a "Quick View" button.
Twig in Laravel:
Use twig/bridge to integrate Twig with Blade:
composer require twig/bridge
Configure in config/twig.php:
'paths' => [
'SyliusUi' => [__DIR__.'/../vendor/sylius/ui-bundle/resources/views'],
],
Symfony UX + Stimulus: For dynamic behavior (e.g., cart updates), use Stimulus controllers:
// assets/controllers/cart_controller.js
import { Controller } from '@hotwired/stimulus';
export default class extends Controller {
connect() {
console.log('Cart component loaded!');
}
}
Link in Twig:
<div data-controller="cart">
{{ include('@SyliusUi/Component/cart-summary.html.twig') }}
</div>
CSS/JS Overrides: Publish assets to customize:
php bin/console assets:install public
Override SCSS variables in assets/app.scss:
@import '~sylius/ui-bundle/assets/styles/_variables';
$primary-color: #3498db; // Customize Sylius’ default palette
Asset Management: Use Laravel Mix/Vite to compile Sylius’ assets alongside your project’s assets.
/api/products). For Laravel, use:
// Example: Fetch products via Sylius API client
$products = $syliusApiClient->products()->all();
Pass data to Twig:
{{ include('@SyliusUi/Component/product-grid.html.twig', {
products: products,
perPage: 12
}) }}
Twig vs. Blade Conflicts:
twig/bridge and configure Twig to ignore Blade tags:
// config/twig.php
'auto_reload' => true,
'autoescape' => false,
'strict_variables' => true,
Asset Paths in Laravel:
/public/build/, but Laravel uses /public/mix/.sylius_ui.yaml:
sylius_ui:
assets:
javascripts:
- '%kernel.project_dir%/public/mix/js/app.js'
stylesheets:
- '%kernel.project_dir%/public/mix/css/app.css'
Symfony UX Dependencies:
symfony/ux-laravel or manually include UX assets.Caching Headaches:
php artisan cache:clear
php artisan view:clear
Template Debugging:
Enable Twig debug mode in config/twig.php:
'debug' => env('APP_DEBUG', true),
Use {{ dump(_context) }} in Twig to inspect variables.
Stimulus Debugging:
Add data-action="click->console.log(event)" to test Stimulus controllers.
API Data Mismatches:
Verify Sylius API responses match SyliusUiBundle’s expected structure (e.g., products should include id, name, price).
Custom Components:
Extend the bundle by creating new Twig components in templates/SyliusUi/Component/.
Example: my-custom-component.html.twig.
Override Templates:
Copy any template from vendor/sylius/ui-bundle/resources/views/ to your project’s templates/SyliusUi/ to customize.
Configuration:
Override default settings in config/packages/sylius_ui.yaml:
sylius_ui:
options:
theme: 'dark' # Override default theme
product_grid:
items_per_page: 20
Event Listeners:
Hook into Sylius events (e.g., sylius.ui.component.render) to modify UI behavior dynamically.
// In a controller
return $this->renderView('SyliusUi/page.html.twig', [], ['cache_key' => 'homepage']);
How can I help you explore Laravel packages today?