- Charge extra fee for a payment method
- Typical usage: Cash on Delivery
- Taxes are implemented the same way as taxes for shipping fees
-
Run
composer require 3brs/sylius-payment-fee-plugin -
Add plugin class to your
config/bundles.phpreturn [ ... ThreeBRS\SyliusPaymentFeePlugin\ThreeBRSSyliusPaymentFeePlugin::class => ['all' => true], ];
-
Add plugin configuration to your
config/packages/_sylius.yamlimports: - { resource: "@ThreeBRSSyliusPaymentFeePlugin/Resources/config/config.yaml" }
-
Your Entity
PaymentMethodhas to implement\ThreeBRS\SyliusPaymentFeePlugin\Model\PaymentMethodWithFeeInterface. You can use TraitThreeBRS\SyliusPaymentFeePlugin\Model\PaymentMethodWithFeeTrait.- see test PaymentMethod for inspiration
For guide how to use your own entity see Sylius docs - Customizing Models
-
JavaScript Integration - Register the Stimulus controller for dynamic calculator configuration forms:
The plugin includes a Stimulus controller (
payment-calculator_controller.js) that handles dynamic prototype forms for payment method calculator configuration. This allows the calculator configuration fields to appear/change dynamically when you select a calculator type in the admin panel.Manual Steps Required:
a. In your application's admin entrypoint file (e.g.,
assets/admin/entrypoint.js):import { startStimulusApp } from '@symfony/stimulus-bridge'; import PaymentCalculatorController from '../../vendor/3brs/sylius-payment-fee-plugin/src/Resources/assets/admin/controllers/payment-calculator_controller'; // Start Stimulus app export const app = startStimulusApp(); // Register the payment calculator controller from the plugin app.register('payment-calculator', PaymentCalculatorController);
b. Rebuild your assets after adding the controller:
yarn install yarn build
How it works:
- When you select a calculator type (e.g., "Flat rate") in the payment method form, the controller dynamically loads the appropriate configuration fields
- On the edit page, it preserves existing saved values
- On the create page, it initializes empty fields for the selected calculator
- The controller uses Stimulus data attributes:
data-controller="payment-calculator",data-payment-calculator-target="select", anddata-payment-calculator-target="container"
-
Create and run doctrine database migrations:
bin/console doctrine:migrations:diff bin/console doctrine:migrations:migrate
- Alter plugin in
/src - See
bin/dir for useful commands
After your changes you must ensure that the tests are still passing.
composer install
bin/console doctrine:database:create --if-not-exists --env=test
bin/console doctrine:schema:update --complete --force --env=test
yarn --cwd tests/Application install
yarn --cwd tests/Application build
bin/behat
bin/phpstan.sh
bin/ecs.sh
vendor/bin/phpspec run-
Install symfony CLI command: https://symfony.com/download
- hint: for Docker (with Ubuntu) use Debian/Ubuntu — APT based
Linux installation steps as
rootuser and withoutsudocommand- you may need to install
curlfirstapt-get update && apt-get install curl --yes
- you may need to install
- hint: for Docker (with Ubuntu) use Debian/Ubuntu — APT based
Linux installation steps as
-
Run app
(cd tests/Application && APP_ENV=test bin/console sylius:fixtures:load) (cd tests/Application && APP_ENV=test symfony server:start --dir=public --port=8080)
- change
APP_ENVtodevif you need it
This library is under the MIT license.


