positibe/sylius-composite-price-calculator-bundle

Sylius项目的复合价格计算器包。

0.1.0 2019-03-19 04:31 UTC

This package is not auto-updated.

Last update: 2024-09-26 07:01:56 UTC


README

此包允许您通过替换默认计算器为复合计算器,在链上使用多个价格计算器。

安装

  1. 使用composer安装插件

    composer require positibe/sylius-composite-price-calculator-bundle
  2. 将插件类添加到您的 AppKernel

使用Symfony Flex

```php
# config/bundles.php
return [
    //...
    Positibe\Sylius\CompositePriceCalculatorBundle\SyliusCompositePriceCalculatorBundle::class => ['all' => true]
];
```

不使用Symfony Flex

```php
$bundles = [
   new \FOS\JsRoutingBundle\FOSJsRoutingBundle(),
   new \Sylius\AdminOrderCreationPlugin\SyliusAdminOrderCreationPlugin(),
];
```

如何使用

注意:此包的主要优势是提供一种在Sylius插件中实现产品变体价格计算器的方法,同时避免它们之间的冲突。如果您确实不需要它,我们建议不要使用它。

此包向我们的 $context 添加了一个新条目,传递给 calculate(ProductVariantInterface $productVariant, array $context): int 方法。现在我们有一个 price,其中包含调用当前计算器之前的最后一个价格。

计算器的任务是根据自定义逻辑添加或修改给定的价格。

以下是一个费用计算器插件的示例

```php

namespace Positibe\Sylius\FeePlugin\Calculator;

use Positibe\Sylius\FeePlugin\Entity\FeeableInterface;
use Sylius\Component\Core\Calculator\ProductVariantPriceCalculatorInterface;
use Sylius\Component\Core\Model\ProductVariantInterface;

class ProductVariantFeeablePriceCalculator implements ProductVariantPriceCalculatorInterface
{
    //... Some stuf to get services

    /**
     * @param ProductVariantInterface|FeeableInterface $productVariant
     * @param array $context
     * @return int
     */
    public function calculate(ProductVariantInterface $productVariant, array $context): int
    {
        $price = (int) $context['price'] ?? 0;
        $fees = $productVariant->getFees();
        foreach ($fees as $fee) {
            if ($fee->isIncludedInPrice()) {
                $price += $this->feeCalculator->calculate($context['price'], $fee);
            }
        }

        return (int) $price;
    }
}
```

默认计算器

Positibe\Sylius\CompositePriceCalculatorBundle\Calculator\CompositePriceCalculator 覆盖了默认计算器 sylius.calculator.product_variant_price 和别名 Sylius\Component\Core\Calculator\ProductVariantPriceCalculatorInterface

默认的一个现在具有ID Sylius\Component\Core\Calculator\ProductVariantPriceCalculator 并具有 priority: 40,优先级越高,执行越早。

此包自动配置实现 Sylius\Component\Core\Calculator\ProductVariantPriceCalculatorInterface 接口的服务,并将服务注入链中。

顺序很重要

您可以通过提供 priority 来更改链计算器的顺序。

注意:默认情况下,优先级为零(`0`),因此没有优先级的顺序是不可预测的。

这里 yaml Positibe\Sylius\FeePlugin\Calculator\ProductVariantFeeablePriceCalculator: autoconfigure: false tags: - { name: 'sylius.price_calculator', priority: 10 }