shiptor / shipping-calculator
基于Symfony 2组件的运费计算库。
0.1.8
2016-03-03 07:41 UTC
Requires
- php: >=5.4
- moriony/trivial: ~0.2
- symfony/config: ~2.7
- symfony/event-dispatcher: ~2.7
- symfony/options-resolver: ~2.7
Requires (Dev)
- codeclimate/php-test-reporter: ~0.2
- mockery/mockery: ~0.9
- nelmio/alice: ~2.1
- phpunit/phpunit: ~4.0
- satooshi/php-coveralls: 0.6.*
README
基于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
是一个事件对象,它包含计算结果和包裹。请查看其他可用事件 这里;
更多关于如何使用和扩展运费计算器的方法
- 为其他快递和运输方式创建计算处理器;
- 使用处理器创建计算器并实现您自己的算法;