- Restrict payment method by zone. This enables to limit selected payment methods to specific zones or areas from the delivery address.
- Restrict payment method by shipping method - this means that it can disable specific shipment-payment combinations.
-
Run
$ composer require 3brs/sylius-payment-restrictions-plugin
-
Add plugin class to your
config/bundles.php
return [ ... ThreeBRS\SyliusPaymentRestrictionPlugin\ThreeBRSSyliusPaymentRestrictionPlugin::class => ['all' => true], ];
-
Your Entity
PaymentMethod
has to implement\ThreeBRS\SyliusPaymentRestrictionPlugin\Model\PaymentMethodRestrictionInterface
. You can use TraitThreeBRS\SyliusPaymentRestrictionPlugin\Model\PaymentMethodRestrictionTrait
<?php declare(strict_types=1); namespace App\Entity\Payment; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use Sylius\Component\Core\Model\Payment as BasePayment; use ThreeBRS\SyliusPaymentRestrictionPlugin\Model\PaymentMethodRestrictionInterface; use ThreeBRS\SyliusPaymentRestrictionPlugin\Model\PaymentMethodRestrictionTrait; /** * @ORM\Entity * @ORM\Table(name="sylius_payment_method") */ class PaymentMethod extends BasePayment implements PaymentMethodRestrictionInterface { use PaymentMethodRestrictionTrait; public function __construct() { parent::__construct(); $this->shippingMethods = new ArrayCollection(); } }
-
Add to
@SyliusAdmin/PaymentMethod/_form.html.twig
(you will have to probably copy-paste original as there is no way to extend that section){# ... #} <div class="ui segment"> {# ... #} <div class="two fields"> {{ form_row(form.zone) }} {{ form_row(form.shippingMethods) }} </div> </div> {# ... #}
-
Create and run doctrine database migrations
bin/console doctrine:migrations:diff bin/console doctrine:migrations:migrate
- how to use your own entity see Sylius docs - Customizing Models
- 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
root
user and withoutsudo
command- you may need to install
curl
firstapt-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_ENV
todev
if you need it
This library is under the MIT license.