Blog
  • Login

  • Login
  • Register
  • Blog

  • Articles
  • fr
  • de

🚀 From Zero to Hero with Sylius: Inside the Practical Essentials Workshop

on May 24, 2025

If you're new to Sylius or looking to solidify your foundations, Gracjan Józefczyk, BitBag Developer & Sylius Key Contributor. It was a workshop at Sylius Days 2025 was a masterclass in eCommerce architecture. 💡

Mastering Sylius Fundamentals: From Resource Configuration to Grids

In a hands-on Sylius workshop led by key contributor and Sylius Academy creator Grazian, experienced Symfony developers explored the foundation of Sylius through live coding, architectural insights, and real-world implementation strategies. This post distills the core technical knowledge from the session—focused on understanding Sylius' dual identity as a platform and a framework, the power of the ResourceBundle and GridBundle, and effective customization approaches.

Problem Context:

Sylius is a Symfony-based eCommerce solution that aims to be both developer-friendly and enterprise-ready. However, getting started or extending it (e.g., creating custom resources or interfaces) often feels daunting due to its opinionated architecture and dependency on its own bundles. Developers entering a Sylius project must first understand how the core entities, services, and configurations interplay to avoid friction later.

Solution Breakdown:

  • Understanding Sylius as a Framework and Platform

Sylius provides a bootstrap-based shop frontend, an admin panel, and a complete API out of the box. It combines the flexibility of a Symfony framework with the plug-and-play capabilities of an eCommerce platform.

Admin Panel: Uses Symfony Security firewalls to distinguish between admin and customer logins.

API: Built with API Platform. Endpoints are exposed for both shop and admin, with clear separation via /shop and /admin prefixes.

  • Resource Configuration with ResourceBundle

The SyliusResourceBundle abstracts away common CRUD operations by leveraging configuration-based entity declarations. To define a new resource:

sylius_resource:
    resources:
        app.brand:
            driver: doctrine/orm
            classes:
                model: App\Entity\Brand

This single block enables:

  • Controller instantiation (via ResourceController)
  • Factory, FormType, and Repository autowiring
  • Service autoconfiguration and routing

Bonus: Use debug:sylius:resource to inspect resource bindings.

  • Exposing Routes with Symfony Routing Config

Once declared, resource routes are exposed via:

sylius_admin_brand:
    resource: "sylius.resource"
    type: sylius.resource
    section: admin
    alias: app.brand
    templates: SyliusAdminBundle:Crud
    redirect: update
    grid: sylius_admin_brand
  • Data Listing with GridBundle

SyliusGridBundle enables admin-side grids for data visualization and interaction (filters, actions, bulk operations).

sylius_grid:
    grids:
        sylius_admin_brand:
            driver:
                name: doctrine/orm
                options:
                    class: App\Entity\Brand
            fields:
                name:
                    type: string
                    label: sylius.ui.name
            filters:
                name:
                    type: string

Grids integrate seamlessly with ResourceBundle. They support:

  • Column filters
  • Inline and bulk actions
  • Easy frontend rendering via Bootstrap-based templates

Extensibility and Community Practices

Advanced use cases showcased during the workshop:

  • Migrating from Sylius 1.14 to Sylius 2 (major changes in Grid rendering, ResourceBundle internals)
  • Using new PHP attribute-based resource declarations (#[AsResource]) to remove YAML verbosity
  • Replacing Winzou state machine with Symfony Workflow for order transitions
  • Integration strategies for CMS, PIM, or search backends (Elasticsearch)

A key strength of Sylius is its active community, maintaining open-source plugins (Stripe, Admin UI, etc.) and contributing back through GitHub and Slack support.

Result/Impact: Participants left with a production-ready Sylius setup, configured Docker environment, and practical knowledge to:

Extend Sylius with custom entities:

  • Use declarative configuration for rapid CRUD
  • Customize admin grids
  • Migrate to newer Sylius versions
  • This approach boosts maintainability, developer onboarding, and speeds up initial development cycles.

Key Takeaways:

  • SyliusResourceBundle eliminates boilerplate for CRUD.
  • SyliusGridBundle provides production-grade admin listings with minimal config.
  • Symfony integration is first-class, enabling smooth DX.
  • Community contributions and practices are critical for scaling Sylius.
  • Use YAML or PHP Attributes based on your project scale and team conventions.

🔧 Mastering Sylius Customizations and Plugins — Advanced Developer Insights

During the advanced Sylius workshop, developers dived deep into two critical aspects of customizing enterprise-level e-commerce: tailoring the business logic via entity, form, and template overrides, and building modular, reusable plugins that remain maintainable and compatible across Sylius versions.

🧩 The Challenge

Modern e-commerce implementations often require tailored logic (e.g., product configurators, vendor-specific data, layered promotions). The default Sylius setup is flexible, but not always turn-key for these advanced needs.

Key developer goals include:

  • Extending entities without breaking inheritance or Doctrine mappings.
  • Injecting new fields into Symfony forms.
  • Overriding templates in a future-proof way.
  • Developing reusable plugins with test environments and version compatibility.

🛠️ Technical Implementation

Extending Entities and Forms

Example: Adding a brand relation to Product

// src/Entity/Product.php
class Product extends BaseProduct
{
    #[ORM\ManyToOne(targetEntity: Brand::class)]
    private ?Brand $brand = null;

    public function getBrand(): ?Brand { return $this->brand; }
    public function setBrand(?Brand $brand): void { $this->brand = $brand; }
}

Inject the field in the admin form using a Form Type Extension:

// src/Form/Extension/ProductTypeExtension.php
class ProductTypeExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder->add('brand', EntityType::class, [
            'class' => Brand::class,
            'choice_label' => 'name',
            'required' => false,
        ]);
    }

    public static function getExtendedTypes(): iterable
    {
        return [ProductType::class];
    }
}

Template Overrides with Twig Hooks

Instead of copying entire templates, you can inject custom logic using Twig Hooks, introduced in Sylius 1.11+.

{ % hook 'sylius.admin.product.form.tab' % }
    { { render(controller('App\\Controller\\BrandController::index')) } }
{ % endhook % }

You can inspect hook names and usage via the Symfony Profiler. Each hook accepts:

  • A priority (for order)
  • Parameters (passed to the template)
  • Optional pre/post hook zones

Building Robust Plugins

Plugin Skeleton

Sylius plugins follow a Symfony bundle structure:

src/
  MyPlugin/
    Controller/
    Entity/
    Repository/
    DependencyInjection/
    MyPlugin.php

They register configuration, routes, and services via dedicated manifests. Common use cases include:

  • Payment integrations (Stripe, Mollie, PayPal)
  • SEO features (sitemaps, structured data)
  • Import/Export functionality
  • Custom promotions, attributes, or checkout logic

Shared Test Application (New Approach)

Historically, each plugin had to ship with a full Sylius test app — creating maintenance nightmares across multiple versions.

Now, the community provides a shared test app package:

composer require --dev sylius/plugin-test-application

This allows per-version CI matrix testing with automatic config patching based on Sylius/Symfony versions.

sylius:
    version: ["1.11", "1.12", "1.13", "1.14", "2.0"]
    symfony: ["5.4", "6.4"]

No more Kernel.php hacks — this makes plugin dev faster and far more maintainable.

📈 Outcome and Benefits

  • Extensibility: Business-specific needs are encapsulated cleanly with zero coupling to Sylius core.
  • Testability: Plugins run isolated with full CI and test apps.
  • Compatibility: Supports multiple Sylius/Symfony versions easily.
  • Developer Experience (DX): Tools like Twig Hooks and sylius:make:resource speed up implementation dramatically.

✅ Key Takeaways for Developers

✅ Use Doctrine inheritance and FormTypeExtension to extend entities and forms cleanly.
✅ Leverage Twig Hooks to inject UI logic without overriding full templates.
✅ Structure your plugins like Symfony bundles and follow best practices (non-final repositories, isolated services).
✅ Use the new test application tool to make your plugins compatible with multiple versions of Sylius and Symfony.
✅ Extract reusable logic into plugins (payment, import/export, Elasticsearch, wishlists…) to scale across projects.

✅ Why This Matters

This workshop wasn't just theoretical — it was built for action. If you're building scalable, customizable, and developer-friendly eCommerce solutions, mastering Sylius is a no-brainer. And Gracjan’s guidance made that journey 10x faster. ⚡

SyliusCon 2025

SyliusCon 2024 was a pivotal moment for the Sylius community, and the excitement is already building for SyliusCon 2025, promising even deeper insights, technical showcases, and community-driven innovation in the evolving e-commerce landscape.

Ressources

Sylius components

  • RessourceBundle : https://github.com/Sylius/SyliusResourceBundle
  • GridBundle : https://github.com/Sylius/SyliusGridBundle
  • Twig hooks : https://afup.org/talks/4929-creer-des-interfaces-d-administration-rapidement-avec-symfony-ux-et-sylius
  • SyliusRecipes : https://github.com/Sylius/SyliusRecipes
  • SyliusStandard : https://github.com/Sylius/Sylius-Standard
  • SyliusDemo : https://github.com/Sylius/SyliusDemo

Plugins

  • Stripe plugin : https://github.com/FLUX-SE/SyliusPayumStripePlugin
  • SyliusElasticsearchPlugin : https://github.com/BitBagCommerce/SyliusElasticsearchPlugin
  • SEO plugin
  • import export (Friend of Sylius) https://github.com/FriendsOfSylius/SyliusImportExportPlugin
  • whishlist
  • GDPR plugin (synolia)
  • Gift card
  • Invoices

💡 Bonus for Creators & Builders

Want to automate your own processes like thumbnail creation, video publishing, or workflow management?

👉 I offer 30-minute free coaching sessions to help creators like you move faster. Let’s simplify your stack, together. 📞 Book your free session here

  • Sitemap - Hello - Blog - Apps - Photos - Contact - - - - - Legal mentions - Darkwood 2025, all rights reserved