shiptor/shipping-calculator

基于Symfony 2组件的运费计算库。

0.1.8 2016-03-03 07:41 UTC

This package is not auto-updated.

Last update: 2024-09-24 04:27:02 UTC


README

Build Status Test Coverage Code Climate Latest Stable Version Total Downloads License

基于Symfony 2组件的运费计算库。

安装

在您的 composer.json 中添加此库的依赖项。

{
    "require": {
        "shiptor/shipping-calculator": "*"
    }
}

然后运行 composer install(或 update)以下载所有文件。

使用方法

如何创建计算器?

以下示例代码将创建一个针对单一运输方式的计算器。

$config = include __DIR__.'/../src/Resources/DHL/ExportExpressWorldWide/tariff_2015_08_25_usa.php';
$calculator = new BaseCalculator([
    'handler' => DhlHandler::create($config)
]);

各部分的作用

  • DhlCalculatorHandler 包含了 Dhl 快递运输方式的计算算法;
  • $config 包含了 DhlHandler 的配置;
  • BaseCalculator 是计算处理器的包装器,它包含一个算法 "如何使用计算处理器" 并返回计算结果;

如何计算包裹的运费?

以下示例代码将创建一个包裹并计算 Dhl 快递的运费。

// previous example code here

$weight = new Weight();
$weight->setValue(10);
$weight->setUnit('lb');

$dimensions = new Dimensions();
$dimensions->setLength(10);
$dimensions->setWidth(10);
$dimensions->setHeight(10);
$dimensions->setUnit('in');

$senderAddress = new Address();
$senderAddress->setCountryCode('USA');

$recipientAddress = new Address();
$recipientAddress->setCountryCode('RUS');

$package = new Package();
$package->setWeight($weight);
$package->setDimensions($dimensions);
$package->setSenderAddress($senderAddress);
$package->setRecipientAddress($recipientAddress);

$result = $calculator->calculate($package);

各部分的作用

  • Weight 包含有关物理重量的信息;
  • Dimensions 包含有关包装盒尺寸的信息。这是计算您的包裹体积重量的必需信息;
  • $senderAddress$recipientAddress 包含有关发件人和收件人的信息;
  • Package 是上述所有对象的包装器对象。您需要将此对象传递给计算器的 calculate 方法;
  • $result 包含您的包裹和计算结果数据;

如何扩展计算器?

运费计算器使用 symfony 事件调度器,您可以使用它来按需扩展计算算法。例如,您可以增加 10 美元的运费。

// place calculator creation code here

$calculator->getDispatcher()->addListener(Events::AFTER_CALCULATE, function (AfterCalculateEvent $event) {
    $event->getResult()->setShippingCost($event->getResult()->getShippingCost() + 10);
});

各部分的作用

  • Events::AFTER_CALCULATE 事件在计算结束时调用,计算结果已准备好;
  • AfterCalculateEvent 是一个事件对象,它包含计算结果和包裹。请查看其他可用事件 这里

更多关于如何使用和扩展运费计算器的方法

  • 为其他快递和运输方式创建计算处理器;
  • 使用处理器创建计算器并实现您自己的算法;