germania-kg/shipping

1.1.0 2023-01-09 14:53 UTC

This package is auto-updated.

Last update: 2024-09-09 18:28:42 UTC


README

处理运输项的类和接口

Packagist PHP version Tests

安装

$ composer require germania-kg/shipping

要求

此包需要 germania-kg/tracking 包。

使用方法

ShipmentItemInterface

ShipmentItemInterface 扩展了 Germania\Shipping\DeliveryNoteNumberProviderInterfaceGermania\Tracking\TrackingInfoAwareInterface\JsonSerializable。因此提供了以下方法:

  • getDeliveryNoteNumber
  • getTrackingInfo
  • setTrackingInfo
  • jsonSerialize

ShipmentItem

ShipmentItem 类实现了 ShipmentItemInterface,并额外提供了 setTrackingInfosetDeliveryNoteNumber 设置方法。

<?php
use Germania\Shipping\ShipmentItem;
use Germania\Tracking\TrackingInfo;

// Prepare components
$tracking_info = new TrackingInfo;
$tracking_info->setTrackingID("foo");
$tracking_info->setTrackingLink("https://track.test.com/?id=foo");

// Use setters
$item = new ShipmentItem;
$item->setDeliveryNoteNumber( "123456" );
$item->setTrackingInfo( $tracking_info );

// Use getters
echo $item->getDeliveryNoteNumber();              // "123456"
echo $item->getTrackingInfo()->getTrackingLink(); // "https://track.test.com/?id=foo"
echo $item->getTrackingInfo()->getTrackingID();   // "foo"

ShipmentItemFactory

fromArray 方法接受 arrayArrayAccess,这些键是必需的:

  • delivery_note_number
  • tracking_id
  • tracking_link

传递其他任何内容将分别触发 InvalidArgumentExceptionUnexpectedValueException

<?php
use Germania\Shipping\ShipmentItemFactory;  
use Germania\Shipping\ShipmentItemInterface;  

$item_factory = new ShipmentItemFactory;
$item = $item_factory->fromArray([
 	'delivery_note_number' => '123456',
  'tracking_id' => 'foo',
  'tracking_link' => 'https://track.test.com/?id=foo'
]);

echo ($item instanceOf ShipmentItemInterface)
? "OK" : "huh?";

ShipmentItemBundle

将多个运输项捆绑在一起,并允许您添加文本描述。它还实现了 \IteratorAggregate\Countable\JsonSerializable

<?php
use Germania\Shipping\ShipmentItemBundle; 

// Prepare
$item1 = new ShipmentItem; #...
$item2 = new ShipmentItem; #...

$items = array(
	$item1,
  $item2
);

// Setup bundle
$description = "Optional: textual desription";
$bundle = new ShipmentItemBundle( $items, $description);
$bundle = new ShipmentItemBundle( $items);

// Add item
$bundle->push( new ShipmentItem );

// Play
$array = $bundle->getDeliveryNoteNumbers();
echo $bundle->getDescription();
echo count( $bundle ); // int 3

foreach ($bundle as $item) {
	echo $item->getDeliveryNoteNumber();  
}

echo json_encode( $bundle );

开发

$ git clone https://github.com/GermaniaKG/Shipping.git shipping
$ cd shipping
$ composer install

# Run PhpUnit
$ composer test