Extending Sylius: How to Create and Use Plugins

image 2593

Sylius is a highly customisable e-commerce framework built on Symfony, one of PHP’s most robust and flexible frameworks. One of the key features that make Sylius so powerful is its plugin system. Plugins allow you to extend and customise the core functionalities of Sylius to suit your unique business needs. In this blog post, we’ll walk you through the process of creating and using plugins in Sylius without delving into specific code details.


Why Use Plugins in Sylius?

Plugins offer numerous benefits:

1. Modularity: They enable you to compartmentalise features, making your codebase cleaner and easier to manage.

2. Reusability: Once created, a plugin can be reused across multiple projects.

3. Community Contributions: You can leverage plugins created by the Sylius community, reducing development time.


Getting Started

Before we dive into plugin creation, ensure you have a working Sylius installation. If you haven’t already installed it, follow the official Sylius installation guide available on their website.


Step-by-Step Guide to Creating a Plugin

Step 1: Setting Up Your Plugin

Begin by setting up a directory structure for your plugin within your Sylius project. This helps in organising the plugin files in a neat and predictable manner. Typically, plugins are placed in a `plugins/` directory inside your project’s root directory. This structure helps keep your custom code separate from the core system, making it easier to manage, update, and debug.

Step 2: Initialising the Plugin

The next step is to initialise your plugin using Composer, a dependency manager for PHP. Composer is essential for managing external packages and libraries that your plugin might depend on. During initialization, you’ll define necessary configurations such as the name, description, type, and autoload settings for your plugin. These settings ensure that Sylius can correctly identify and load your plugin.

Step 3: Structuring Your Plugin

Organising your plugin’s directory structure is crucial for maintainability. A well-structured directory will have distinct folders such as:

– src/: Contains the main code for your plugin.

– DependencyInjection/: For loading service configurations.

– Resources/: For storing configuration files, translations, templates, etc.

– tests/: For unit and integration tests.

This modular approach helps in managing the code efficiently and makes it easier for other developers to understand and contribute to the plugin.

Step 4: Defining the Plugin Class

Your plugin will have a primary class that serves as its entry point. This class will typically extend components from Sylius or Symfony to integrate seamlessly with the framework. The primary plugin class is responsible for bootstrapping your plugin and ensuring it’s loaded correctly within the Sylius application. This setup allows Sylius to recognize your plugin and utilise its functionalities.

Step 5: Configuring Dependency Injection

Dependency injection is a design pattern used to implement IoC (Inversion of Control). It allows a class to declare its dependencies rather than creating them internally, promoting loose coupling and enhancing testability. For your plugin, you’ll create an extension that loads various configuration files and services necessary for the plugin’s functionality. This ensures that all dependencies required by your plugin are properly managed and injected where needed.

Step 6: Registering Services

Define all the services required by your plugin in service configuration files usually found in the `Resources/config` directory. Services could include controllers, forms, entity managers, or any other feature that needs to be instantiated by the dependency injection container. Registering services ensures that they are available throughout your application whenever needed. Properly registered services make your plugin’s components readily accessible and reusable.

Step 7: Enabling Your Plugin

Finally, you need to enable your plugin within your Sylius project configuration. This step usually involves updating a configuration file (like `bundles.php`) to include your new plugin so that it becomes an active part of the application. Think of this as turning on the switch—by enabling the plugin, you’re allowing it to participate in the application lifecycle, initialise its services, and provide its functionalities.

Step 8: Adding Features to Your Plugin

With all basic steps completed, you can now add specific features to your plugin based on your business requirements. This could include custom:

– Controllers: Handle user requests and business logic.

– Entities: Define database tables and their relationships.

– Forms: Manage form handling and validation.

– Translations: Provide multilingual support.

– Templates: Customise UI elements with Twig templates.

These elements allow you to tailor-make components that integrate seamlessly with Sylius while addressing specific business needs.


Using Community Plugins

Apart from creating your own plugins, you can also take advantage of a rich ecosystem of community plugins developed by other Sylius users. These community plugins can significantly reduce development time and effort as they provide pre-built functionalities that you can readily incorporate into your project.


Finding Community Plugins

The first step is to find the right plugin for your needs. The Sylius community maintains a directory of plugins, which you can browse through. Websites like GitHub also host many open-source Sylius plugins. Make sure to check the plugin’s documentation, reviews, and activity (such as recent commits and issues) to gauge its reliability and community support.


Installing Community Plugins

Once you’ve found a suitable plugin, installation usually involves the following general steps:

1. Add the Plugin via Composer: Most plugins will provide a Composer command that you can run in your terminal to integrate the plugin into your project.

2. Enable the Plugin: After installation, you must typically enable the plugin by updating your project’s configuration files.

3. Configure the Plugin: Many plugins come with their own set of configurations that you might need to customise to fit your specific needs. This could involve setting options in configuration files or modifying templates.

4. Run Migrations: If the plugin modifies the database schema, you’ll need to run migrations to apply those changes.


Benefits of Using Community Plugins

1. Time Efficiency: Save development hours by leveraging pre-built functionalities.

2. Reliability: Many community plugins are battle-tested and have been used in numerous projects.

3. Support: Active plugins often come with community support and regular updates, ensuring compatibility with newer versions of Sylius.



Creating and using plugins in Sylius allows you to extend and customise your e-commerce platform without modifying its core files. This modular approach enables you to build scalable, maintainable, and reusable components tailored to your business requirements.

Whether you’re looking to build custom functionalities from scratch or leverage community-developed plugins, Sylius provides the flexibility and power needed for modern e-commerce solutions. A firm understanding of how to create, configure, and manage plugins gives you a competitive edge, allowing you to create a unique and highly tailored user experience.

Related blogs

Want to get in touch and learn more about what we can do? We love to just have a chat digital or in person.