setono / sylius-gift-card-plugin
Sylius 礼品卡插件
Requires
- php: >=7.4
- ext-filter: *
- ext-mbstring: *
- api-platform/core: ^2.6
- doctrine/collections: ^1.8
- doctrine/dbal: ^2.13 || ^3.0
- doctrine/orm: ^2.7
- doctrine/persistence: ^1.3 || ^2.5
- fakerphp/faker: ^1.21
- knplabs/knp-menu: ^3.3
- knplabs/knp-snappy: ^1.4
- knplabs/knp-snappy-bundle: ^1.9
- setono/doctrine-object-manager-trait: ^1.1
- sylius/api-bundle: ^1.10
- sylius/channel: ^1.0
- sylius/channel-bundle: ^1.0
- sylius/core: ^1.0
- sylius/core-bundle: ^1.0
- sylius/currency: ^1.0
- sylius/customer: ^1.0
- sylius/grid-bundle: ^1.0
- sylius/locale: ^1.0
- sylius/locale-bundle: ^1.0
- sylius/mailer-bundle: ^1.6 || ^2.0
- sylius/money-bundle: ^1.0
- sylius/order: ^1.10
- sylius/order-bundle: ^1.0
- sylius/product: ^1.0
- sylius/product-bundle: ^1.0
- sylius/promotion: ^1.0
- sylius/resource-bundle: ^1.8
- sylius/shipping-bundle: ^1.0
- sylius/ui-bundle: ^1.0
- sylius/user: ^1.0
- symfony/config: ^5.4 || ^6.0
- symfony/dependency-injection: ^5.4 || ^6.0
- symfony/event-dispatcher: ^5.4 || ^6.0
- symfony/form: ^5.4 || ^6.0
- symfony/http-foundation: ^5.4 || ^6.0
- symfony/http-kernel: ^5.4 || ^6.0
- symfony/messenger: ^5.4 || ^6.0
- symfony/options-resolver: ^5.4 || ^6.0
- symfony/property-access: ^5.4 || ^6.0
- symfony/routing: ^5.4 || ^6.0
- symfony/security-core: ^5.4 || ^6.0
- symfony/serializer: ^5.4 || ^6.0
- symfony/translation-contracts: ^2.4
- symfony/validator: ^5.4 || ^6.0
- twig/twig: ^2.15 || ^3.5
- webimpress/safe-writer: ^2.2
- webmozart/assert: ^1.11
Requires (Dev)
- lexik/jwt-authentication-bundle: ^2.19
- matthiasnoback/symfony-config-test: ^4.3
- matthiasnoback/symfony-dependency-injection-test: ^4.3
- php-http/message-factory: ^1.1
- phpspec/phpspec: ^7.4
- phpspec/prophecy-phpunit: ^2.0.2
- phpunit/phpunit: ^9.6.13
- psalm/plugin-phpunit: ^0.18
- psalm/plugin-symfony: ^5.0
- setono/code-quality-pack: ^2.6
- setono/sylius-behat-pack: ^0.2.2
- setono/sylius-catalog-promotion-plugin: ^0.4.8 || ^0.5
- sylius/sylius: ~1.10.14
- symfony/debug-bundle: ^5.4 || ^6.0
- symfony/dotenv: ^5.4 || ^6.0
- symfony/framework-bundle: ^5.4 || ^6.0
- symfony/intl: ^5.4 || ^6.0
- symfony/property-info: ^5.4 || ^6.0
- symfony/web-profiler-bundle: ^5.4 || ^6.0
- symfony/webpack-encore-bundle: ^1.17
- weirdan/doctrine-psalm-plugin: ^2.9
- 0.12.x-dev
- v0.12.0-alpha.7
- v0.12.0-alpha.6
- v0.12.0-alpha.5
- v0.12.0-alpha.4
- v0.12.0-alpha.3
- v0.12.0-alpha.2
- v0.12.0-alpha
- 0.11.x-dev
- v0.11.10
- v0.11.9
- v0.11.8
- v0.11.7
- v0.11.6
- v0.11.5
- v0.11.4
- v0.11.3
- v0.11.2
- v0.11.1
- v0.11.0
- v0.10.5
- v0.10.4
- v0.10.3
- v0.10.2
- v0.10.1
- v0.10.0
- v0.9.0
- v0.8.7
- v0.8.6
- v0.8.5
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.0
- v0.6.5
- v0.6.4
- v0.6.3
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.0
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.1
- v0.3.0
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.0
- dev-dependabot/composer/setono/sylius-catalog-promotion-plugin-tw-0.5
- dev-use-same-input-discount-gift-card
- dev-fix-psalm-totally-typed
- dev-fix-19-compatibility
- dev-59-use-same-input-promotion-gc
This package is auto-updated.
Last update: 2024-09-24 08:38:57 UTC
README
将礼品卡功能添加到您的商店
- 购买礼品卡
- 使用礼品卡购买产品
- 通过查找礼品卡代码查看礼品卡的余额
管理员将能够访问一个仪表板,显示礼品卡的总未结余额,可用于审计。
截图
▶▶ 跳过截图,直接进入安装
API 平台支持
所有与礼品卡相关的操作都可以通过 API 完成。无论是管理员还是商店操作
安装
需要通过 composer 安装插件
$ composer require setono/sylius-gift-card-plugin
导入配置
# config/packages/setono_sylius_gift_card.yaml imports: # ... - { resource: "@SetonoSyliusGiftCardPlugin/Resources/config/app/config.yaml" }
(可选) 导入数据样本
如果您希望在开发过程中在应用程序中试用一些礼品卡。
# config/packages/setono_sylius_gift_card.yaml imports: # ... - { resource: "@SetonoSyliusGiftCardPlugin/Resources/config/app/fixtures.yaml" }
导入路由
# config/routes.yaml setono_sylius_gift_card: resource: "@SetonoSyliusGiftCardPlugin/Resources/config/routes.yaml"
或者如果您的应用程序不使用区域设置
# config/routes.yaml setono_sylius_gift_card: resource: "@SetonoSyliusGiftCardPlugin/Resources/config/routes_no_locale.yaml"
将插件类添加到您的 bundles.php
请确保在 SyliusGridBundle
之前添加它,否则您将遇到 您请求的参数 "setono_sylius_gift_card.model.gift_card.class" 不存在。
异常。
<?php $bundles = [ // ... Setono\SyliusGiftCardPlugin\SetonoSyliusGiftCardPlugin::class => ['all' => true], Sylius\Bundle\GridBundle\SyliusGridBundle::class => ['all' => true], // ... ];
复制模板
您将在 测试应用程序 中找到需要覆盖的模板。
扩展实体
扩展 Product
<?php # src/Entity/Product/Product.php declare(strict_types=1); namespace App\Entity\Product; use Doctrine\ORM\Mapping as ORM; use Setono\SyliusGiftCardPlugin\Model\ProductInterface as SetonoSyliusGiftCardProductInterface; use Setono\SyliusGiftCardPlugin\Model\ProductTrait as SetonoSyliusGiftCardProductTrait; use Sylius\Component\Core\Model\Product as BaseProduct; /** * @ORM\Entity * @ORM\Table(name="sylius_product") */ class Product extends BaseProduct implements SetonoSyliusGiftCardProductInterface { use SetonoSyliusGiftCardProductTrait; }
扩展 Order
<?php # src/Entity/Order/Order.php declare(strict_types=1); namespace App\Entity\Order; use Setono\SyliusGiftCardPlugin\Model\OrderInterface as SetonoSyliusGiftCardPluginOrderInterface; use Setono\SyliusGiftCardPlugin\Model\OrderTrait as SetonoSyliusGiftCardPluginOrderTrait; use Sylius\Component\Core\Model\Order as BaseOrder; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="sylius_order") */ class Order extends BaseOrder implements SetonoSyliusGiftCardPluginOrderInterface { use SetonoSyliusGiftCardPluginOrderTrait { SetonoSyliusGiftCardPluginOrderTrait::__construct as private __giftCardTraitConstruct; } public function __construct() { $this->__giftCardTraitConstruct(); parent::__construct(); } }
扩展 OrderItem
<?php # src/Entity/Order/OrderItem.php declare(strict_types=1); namespace App\Entity\Order; use Doctrine\ORM\Mapping as ORM; use Setono\SyliusGiftCardPlugin\Model\OrderItemTrait as SetonoSyliusGiftCardOrderItemTrait; use Sylius\Component\Core\Model\OrderItem as BaseOrderItem; /** * @ORM\Entity * @ORM\Table(name="sylius_order_item") */ class OrderItem extends BaseOrderItem { use SetonoSyliusGiftCardOrderItemTrait; }
扩展 OrderItemUnit
<?php # src/Entity/Order/OrderItemUnit.php declare(strict_types=1); namespace App\Entity\Order; use Doctrine\ORM\Mapping as ORM; use Setono\SyliusGiftCardPlugin\Model\OrderItemUnitInterface as SetonoSyliusGiftCardOrderItemUnitInterface; use Setono\SyliusGiftCardPlugin\Model\OrderItemUnitTrait as SetonoSyliusGiftCardOrderItemUnitTrait; use Sylius\Component\Core\Model\OrderItemUnit as BaseOrderItemUnit; /** * @ORM\Entity * @ORM\Table(name="sylius_order_item_unit") */ class OrderItemUnit extends BaseOrderItemUnit implements SetonoSyliusGiftCardOrderItemUnitInterface { use SetonoSyliusGiftCardOrderItemUnitTrait; }
扩展 OrderRepository
<?php # src/Doctrine/ORM/OrderRepository.php declare(strict_types=1); namespace App\Doctrine\ORM; use Setono\SyliusGiftCardPlugin\Repository\OrderRepositoryInterface as SetonoSyliusGiftCardPluginOrderRepositoryInterface; use Setono\SyliusGiftCardPlugin\Doctrine\ORM\OrderRepositoryTrait as SetonoSyliusGiftCardPluginOrderRepositoryTrait; use Sylius\Bundle\CoreBundle\Doctrine\ORM\OrderRepository as BaseOrderRepository; class OrderRepository extends BaseOrderRepository implements SetonoSyliusGiftCardPluginOrderRepositoryInterface { use SetonoSyliusGiftCardPluginOrderRepositoryTrait; }
扩展 CustomerRepository
<?php # src/Doctrine/ORM/CustomerRepository.php declare(strict_types=1); namespace App\Doctrine\ORM; use Setono\SyliusGiftCardPlugin\Repository\CustomerRepositoryInterface as SetonoSyliusGiftCardPluginCustomerRepositoryInterface; use Setono\SyliusGiftCardPlugin\Doctrine\ORM\CustomerRepositoryTrait as SetonoSyliusGiftCardPluginCustomerRepositoryTrait; use Sylius\Bundle\CoreBundle\Doctrine\ORM\CustomerRepository as BaseCustomerRepository; class CustomerRepository extends BaseCustomerRepository implements SetonoSyliusGiftCardPluginCustomerRepositoryInterface { use SetonoSyliusGiftCardPluginCustomerRepositoryTrait; }
- 添加配置
# config/services.yaml sylius_customer: resources: customer: classes: repository: App\Doctrine\ORM\CustomerRepository sylius_order: resources: order: classes: model: App\Entity\Order\Order repository: App\Doctrine\ORM\OrderRepository order_item: classes: model: App\Entity\Order\OrderItem order_item_unit: classes: model: App\Entity\Order\OrderItemUnit sylius_product: resources: product: classes: model: App\Entity\Product\Product
复制 API 资源
需要复制的资源声明是
如果您已经覆盖了它们,只需更改以下路由
<itemOperation name="shop_add_item"> <attribute name="method">PATCH</attribute> <attribute name="path">/shop/orders/{tokenValue}/items</attribute> <attribute name="messenger">input</attribute> <attribute name="input">Setono\SyliusGiftCardPlugin\Api\Command\AddItemToCart</attribute> <!-- This has been changed compared to the core --> <attribute name="normalization_context"> <attribute name="groups">shop:cart:read</attribute> </attribute> <attribute name="denormalization_context"> <attribute name="groups">shop:cart:add_item</attribute> </attribute> <attribute name="openapi_context"> <attribute name="summary">Adds Item to cart</attribute> </attribute> </itemOperation>
更新您的数据库
$ bin/console doctrine:migrations:diff $ bin/console doctrine:migrations:migrate
安装资产
$ php bin/console assets:install
清除缓存
$ php bin/console cache:clear
配置
更改添加/移除礼品卡到订单的跳转路由
您可以根据需要更改跳转路由配置来自定义在添加或移除礼品卡后重定向到的位置。
setono_sylius_gift_card_shop_remove_gift_card_from_order: path: /gift-card/{giftCard}/remove-from-order methods: GET defaults: _controller: setono_sylius_gift_card.controller.action.remove_gift_card_from_order redirect: route: sylius_shop_cart_summary parameters: []
同样适用于 setono_sylius_gift_card_shop_partial_add_gift_card_to_order
路由
您还可以覆盖或装饰服务 setono_sylius_gift_card.resolver.redirect_url
来定义更自定义的重定向方式
使用方法
有关如何使用礼品卡插件的详细信息,请参阅 使用方法。
开发
测试
$ composer tests
玩耍
要运行内置的应用程序,显示插件的运行情况,只需运行
$ composer try
贡献
在 http://docs.sylius.org/en/latest/contributing/ 上了解更多关于我们贡献流程的信息。
请,在发起拉取请求之前,运行 composer all
以运行所有检查和测试。