5. THE PROBLEM
PHP has changed
This change created the market for a new e-commerce solution
among developers
With the flexibility of modern frameworks and the new way of
collaboration we can build something interesting for the business
Sylius reflects this evolution
7. WHAT IS SYLIUS
A short history
Open sourced in 2011 as a set of bundles
Main application in development for ~9 months
Already used in production by developers and companies
12. QUALITY
Behat and phpspec, perfect combination
Most of new features start with an RFC issue
Discussion about the idea and eventual implementation
Behat features
Implementation
18. BUNDLES vs. MAIN APPLICATION
Set of 19 decoupled and
independent bundles
Standard webshop
experience
Can be used to create a
custom platform
Highly customizable
Integrate e-commerce into
existing application
Easy to understand for
every Symfony2 developer
20. Simpler CRUD for symfony
SyliusResourceBundle
Removing tons of duplicated code in controllers for basic CRUD
actions.
Removing the manager and manipulator classes, relying on
Doctrine instead.
Removing the "frontend" and "backend" controllers.
Supporting different persistence layers.
Make the controllers format agnostic. (API)
29. USING CUSTOM MODELS and FORMS
Every model class can be overridden
All repositories, managers and forms are
updated automatically
Form class can be customized
31. YOUR OWN REPOSITORY
Sylius repositories extend native Doctrine
implementations
Override the repositories through configuration
Repositories are services
32. CHANGE THE RULES, VALIDATION
All Sylius models ship with their own validation
mapping under group sylius
You can easily override it with your own rules
Consistent translation messages
33. DOCTRINE RTEL, DYNAMIC RELATIONS
We're using interfaces instead of
implementation to define the relations
When you override the model class, all relations
get updated automatically
Defaults are turned into entities if you don't
provide your own class
34. WE LOVE EVENTS, YOU SHOULD TOO
The default controller triggers multiple useful
events during CRUD actions
sylius.product.pre_create
sylius.product.post_create
37. ORDERS AND CART
SyliusOrderBundle + SyliusCartBundle
Generic Order model with support of Adjustments
Cart bundle provides actions and services for customer to
interact with the Order entity
The order/cart items can be easily customized to handle
different options
39. COUNTRIES, ZONES AND ADDRESSES
SyliusAddressingBundle
Provides a very basic Address model
Countries and their Provinces management
Zones system with a ZoneMatcher service
Useful for taxation and shipping zones
41. TAKE CARE OF YOUR INVENTORY
SyliusInventoryBundle
Built around 1 interface you need to implement
Tracks every single inventory unit
Based on events
Items available on demand
Backorders
42. HATE IT OR LOVE IT, TAXATION
SyliusTaxationBundle
TaxableInterface = heart of the bundle
Multiple tax categories and rates support
Customizable tax calculators
Tax included in price
43. MERCHANDISE NEEDS TO BE SHIPPED
SyliusShippingBundle
Integrate through one interface
Manage Shipments and Shipping Methods
Custom shipping rules
Flexible calculators system
44. class PerItemRateCalculator extends Calculator
{
public function calculate(ShippingSubjectInterface $subject, array $configuration)
{
return $configuration['amount'] * $subject->getShippingItemCount();
}
public function getConfigurationFormType()
{
return 'sylius_shipping_calculator_per_item_rate_configuration';
}
public function setConfiguration(OptionsResolverInterface $resolver)
{
$resolver
->setRequired(array( 'amount'))
->setAllowedTypes(array('amount' => array('numeric')))
;
}
}
46. CATEGORIZE ALL THIS STUFF, NOW
SyliusTaxonomiesBundle
Classify any Model using different Taxonomies
Flexible forms
Based on DoctrineExtensions
48. JUST FEW STEPS MORE
SyliusFlowBundle
Useful for anything which takes more than 1
action to complete
Checkouts, installation wizards, complex actions
Used by OroCRM and Akeneo PIM for installers
49. PROCESS SCENARIO
<?php
class CheckoutProcessScenario implements ProcessScenarioInterface
{
public function build(ProcessBuilderInterface $builder)
{
$builder
->add('security', 'sylius_checkout_security')
->add('addressing', 'sylius_checkout_addressing')
->add('shipping', 'sylius_checkout_shipping')
->add('payment', 'sylius_checkout_payment')
->add('finalize', 'sylius_checkout_finalize')
->add('purchase', 'sylius_checkout_purchase')
;
}
}
51. Make your app configurable, EASILY
SyliusSettingsBundle
You can define settings schema and the form
User edits the settings through UI
You get the access via services and Twig
52. Settings schema
class GeneralSettingsSchema implements SchemaInterface
{
public function buildSettings(SettingsBuilderInterface $builder)
{
$builder
->setDefaults(array(
'meta_keywords'
=> 'symfony, sylius, ecommerce, webshop, shopping cart',
'meta_description' => 'Sylius is modern ecommerce solution for PHP.',
))
->setAllowedTypes(array(
'meta_keywords'
=> array('string'),
'meta_description' => array('string'),
))
;
}
53. EDITING VIA FORM
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('meta_keywords', 'text', array(
'constraints' => array(new NotBlank())
))
->add('meta_description', 'textarea', array(
'constraints' => array(new NotBlank())
))
;
}
68. TO DO
Documentation, documentation, documentation
New default store look
Rework translations and integrate with CrowdIn
Polish the checkout process
Integrate BazingaHateoasBundle for API
Integrate Symfony CMF and Create.js
69. COMING SOON...
Pull Requests
Customer groups
Subscriptions support
Product reviews
Symfony CMF integration (editable blocks and pages)
Facebook/Amazon and so on...