setono/sylius-gift-card-plugin

Sylius 礼品卡插件

安装次数: 143,147

依赖者: 1

建议者: 0

安全性: 0

星标: 45

关注者: 7

分支: 40

公开问题: 23

类型:sylius-plugin

v0.12.0-alpha.7 2023-12-21 09:08 UTC

README

Latest Version on Packagist Software License Build Status

将礼品卡功能添加到您的商店

  • 购买礼品卡
  • 使用礼品卡购买产品
  • 通过查找礼品卡代码查看礼品卡的余额

管理员将能够访问一个仪表板,显示礼品卡的总未结余额,可用于审计。

截图

▶▶ 跳过截图,直接进入安装

Screenshot showing admin menu and index

Screenshot showing gift card admin create page

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 资源

需要复制的资源声明是

如果您已经覆盖了它们,只需更改以下路由

Order.xml

<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 以运行所有检查和测试。