positibe / sylius-composite-price-calculator-bundle
Sylius项目的复合价格计算器包。
Requires
- php: ^7.2
- sylius/core-bundle: ^1.4
- symfony/config: ^4.1
- symfony/dependency-injection: ^4.1
- zendframework/zend-stdlib: ^3.1
This package is not auto-updated.
Last update: 2024-09-26 07:01:56 UTC
README
此包允许您通过替换默认计算器为复合计算器,在链上使用多个价格计算器。
安装
-
使用composer安装插件
composer require positibe/sylius-composite-price-calculator-bundle
-
将插件类添加到您的
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 }