Sylius v0.10.0 released
I mentioned it several times in my recent blog posts about the future of Sylius - I want smaller and more frequent releases.
After almost 500 commits from over 30 contributors, I am very happy to announce availability of Sylius v0.10.0. It is a quite big release and contains huge amount of improvements.
From now on, I will do my best to follow the roadmap and tag more often. You can see our development plans here.
We focused more on the architecture and internals than on packing new features in, but you will not be disappointed! In the coming weeks, we want to fill the “feature-gaps”, which are the only blockers for the stable version of Sylius!
E-Commerce components for PHP
This is the biggest change from v0.9.0. We have extracted standalone e-commerce components for “raw” PHP. This approach is very similar to what you see in Symfony - A set of decoupled libraries, integrated together into full-stack framework.
With Sylius, we have the components, which provide you with the most common features, and bundles as integration layers for Symfony. On top of this, we have the main platform - Flexible foundation for e-commerce project of any scale.
Why? Firstly, this is the best approach to decouple e-commerce specific domain from the framework. It allows us to keep the architecture cleaner and better organized. Secondly, this allows Sylius code and concepts to be used outside the Symfony world, as e-commerce toolset for php.
Developers from different communities are already evaluating the idea of building their platform with Sylius components and a framework of their preference.
Managing all states and transitions with StateMachine
This is one f my favorite upgrades! Previously, all states (order status, payment state, shipping, etc.) were hard-coded and while you could add your own and modify the workflow - It was not that easy. With the introduction of StateMachine, you have full control over all states, transitions and events. (callbacks)
You can change the way Sylius works with a simple configuration scheme, add your own states and transitions or easily hook into the whole process with your custom callbacks.
Thank you for all people involved and especially Alexandre Bacco, who implemented this awesome feature!
Multiple payments per order
We have created a foundation for handling multiple payments per order. This is much more flexible and creates a wide range of opportunities to implement related features, like shipping from different locations. The solution is really clean and similar to the way we handle shipments processing in checkout. You can select a different method for every payment.
Huge thank you to Ka Yue Yeung for working on this!
Attributes and variations
I have extracted these features from our products catalog, to be usable with any model. Using the two new bundles you can manage flexible attributes for any object and create variations of any model, using options and variants. Internally, we currently use it only for the products, but I am considering adding attributes to users as well. That being said, you can benefit from this decoupling in your project and use it for whatever you need.
I also implemented a very simple, but flexible pricing system, which allows you to create your own calculators with custom logic. It supports time/volume/customer based pricing out-of-the-box and as everything in Sylius - It is available via standalone component and bundle.
This is already quite powerful, but I have some great plans to expand it and make even more useful for customizations and basic usage.
Our integration with SymfonyCMF goes even further and we are now using flexible Routing system. This gives us a lot more flexibility - Drupal8 uses the same engine! Generating and managing urls for categories and products is now much easier.
Thank you Lukas Kahwe Smith!
Unlimited OAuth providers
Sylius has already supported login via Facebook, Google and Amazon, but our implementation was limiting us to these three providers. Of course, you could add a new one in your app, but it was not clean and required a bit of tedious work. In version v0.10.0, we have reworked our system to support unlimited amount of different services. It is also much easier for you to add your own login method.
We have upgraded our testing stack to the latest version of Behat, which brings a lot of new things. We also decoupled our big “DataContext” into several smaller ones, making the code cleaner. I talked a bit about this update and BDD in Open Source during the London Behat Meetup.
Yes, this is a large update and there is a lot of other stuff that I would love to write down here, but I think you are already tired and hopefully excited.
A quick overview of the rest of notable changes in this release:
- Standard way to generate sequential numbers for orders and other entities,
- Thanks to Patrik Karisch, you can depend on “sylius/sylius” and contribute much more easily,
- Maksim Kotlyar continued to make Sylius&Payum integration even better,
- Tons of small bugfixes and little improvements.
You can install and try the latest Sylius by running the following commands:
$ composer create-project -s dev sylius/sylius:v0.10.0 $ cd sylius $ app/console sylius:install
- Due to BC breaks in the latest versions of PHP, we got stuck between two bugs in Doctrine and DoctrineExtensions and you may experience problems with newest PHP 5.6.x,
- Some JS for forms is currently broken, but will be fixed with the new SyliusUiBundle for next release.
I am very thankful to all people who have contributed to this milestone. Code, idea or just a bug report... You are awesome! After a very successful launch of Lakion.com, I am back to full speed of development and just implemented three big points from the roadmap.
I hope to have v0.11.0 out within next two weeks. Stay tuned!