A Sylius plugin that adds customer options
With this plugin the customer can add additional info to the product like so:
Run composer require brille24/sylius-customer-options-plugin
.
Register the Plugin in your config/bundles.php
:
return [
//...
Brille24\SyliusCustomerOptionsPlugin\Brille24SyliusCustomerOptionsPlugin::class => ['all' => true],
];
config.yml
to your local config/packages/_sylius.yaml
:imports:
...
- { resource: "@Brille24SyliusCustomerOptionsPlugin/Resources/config/app/config.yml" }
routing.yml
to your local config/routes.yaml
:brille24_customer_options:
resource: "@Brille24SyliusCustomerOptionsPlugin/Resources/config/app/routing.yml"
sylius_shop_ajax_cart_add_item:
path: ajax/cart/add
methods: [POST]
defaults:
_controller: sylius.controller.order_item::addAction
_format: json
_sylius:
factory:
method: createForProductWithCustomerOption
arguments: [expr:notFoundOnNull(service('sylius.repository.product').find($productId))]
form:
type: Sylius\Bundle\CoreBundle\Form\Type\Order\AddToCartType
options:
product: expr:notFoundOnNull(service('sylius.repository.product').find($productId))
redirect:
route: sylius_shop_cart_summary
parameters: {}
flash: sylius.cart.add_item
sylius_shop_partial_cart_add_item:
path: cart/add-item
methods: [GET]
defaults:
_controller: sylius.controller.order_item::addAction
_sylius:
template: $template
factory:
method: createForProductWithCustomerOption
arguments: [expr:notFoundOnNull(service('sylius.repository.product').find($productId))]
form:
type: Sylius\Bundle\CoreBundle\Form\Type\Order\AddToCartType
options:
product: expr:notFoundOnNull(service('sylius.repository.product').find($productId))
redirect:
route: sylius_shop_cart_summary
parameters: {}
From: [shop_dir]/vendor/brille24/sylius-customer-options-plugin/test/Application/templates
To: [shop_dir]/templates
In order to use the customer options, you need to override the product and order item.
use Brille24\SyliusCustomerOptionsPlugin\Entity\ProductInterface;
use Brille24\SyliusCustomerOptionsPlugin\Traits\ProductCustomerOptionCapableTrait;
use Sylius\Component\Core\Model\Product as BaseProduct;
class Product extends BaseProduct implements ProductInterface {
use ProductCustomerOptionCapableTrait {
__construct as protected customerOptionCapableConstructor;
}
public function __construct()
{
parent::__construct();
$this->customerOptionCapableConstructor();
}
// ...
}
use Brille24\SyliusCustomerOptionsPlugin\Entity\OrderItemInterface;
use Brille24\SyliusCustomerOptionsPlugin\Traits\OrderItemCustomerOptionCapableTrait;
use Sylius\Component\Core\Model\OrderItem as BaseOrderItem;
class OrderItem extends BaseOrderItem implements OrderItemInterface
{
use OrderItemCustomerOptionCapableTrait {
__construct as protected customerOptionCapableConstructor;
}
public function __construct()
{
parent::__construct();
$this->customerOptionCapableConstructor();
}
// ...
}
brille24_sylius_customer_options_plugin_fixtures.yaml
file from the package directory and runbin/console sylius:fixtures:load
bin/console doctrine:migrations:diff
bin/console doctrine:migrations:migrate
bin/console translation:update
When developing it is recommended to use git hooks for this just copy the docs/pre-commit
to .git/hooks/pre-commit
and make it executable. Then you will check your codestyle before committing.
Documentation on how to use the plugin can be found here.