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],
];
Add the config.yml
to your local config/packages/_sylius.yaml
:
imports:
...
- { resource: "@Brille24SyliusCustomerOptionsPlugin/Resources/config/app/config.yml" }
Add the 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: {}
* Copy the template overrides from the plugin directory
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.
```php
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();
}
// ...
}
If you also want default data you need to copy over the brille24_sylius_customer_options_plugin_fixtures.yaml
file from the package directory and run
bin/console sylius:fixtures:load
Finally, generate migrations, update the database and update the translations:
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.