What’s new / Upgrading¶
Note
Below is summary of key changes between versions that you should be aware of. A full changelog, including changes in minor versions is available from https://github.com/dvdoug/BoxPacker/blob/master/CHANGELOG.md
Version 3¶
Positional information on packed items¶
Version 3 allows you to see the positional and dimensional information of each item as packed. Exposing this additional data
unfortunately means an API change - specifically PackedBox->getItems
now returns a set of PackedItem
s rather than
Item
s. A PackedItem
is a wrapper around around an Item with positional and dimensional information
(x/y/z co-ordinates of corner closest to origin, width/length/depth as packed). Adapting existing v2 code to v3 is simple:
Before
<?php
$itemsInTheBox = $packedBox->getItems();
foreach ($itemsInTheBox as $item) { // your own item object
echo $item->getDescription() . PHP_EOL;
}
After
<?php
$packedItems = $packedBox->getItems();
foreach ($packedItems as $packedItem) { // $packedItem->getItem() is your own item object
echo $packedItem->getItem()->getDescription() . PHP_EOL;
}
If you use BoxPacker\ConstrainedItem
, you’ll need to make the same change there too.
PHP 7 type declarations¶
Version 3 also takes advantage of the API break opportunity introduced by the additional positional information and is the first
version of BoxPacker to take advantage of PHP7’s type declaration system. The core BoxPacker\Item
and BoxPacker\Box
interfaces definitions have been supplemented with code-level type information to enforce expectations. This is a technical break
only, no implementation requires changing - only the correct type information added, e.g.
Before
<?php
/**
* @return string
*/
public function getDescription()
{
return $this->description;
}
After
<?php
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
Version 2¶
3D rotation when packing¶
Version 2 of BoxPacker introduces a key feature for many use-cases, which is support for full 3D rotations of items. Version 1
was limited to rotating items in 2D only - effectively treating every item as “keep flat” or “ship this way up”. Version 2
adds an extra method onto the BoxPacker\Item
interface to control on a per-item level whether the item can be turned onto
it’s side or not.
Removal of deprecated methods¶
The packIntoBox
, packBox
and redistributeWeight
methods were removed from the Packer
class. If you were previously
using these v1 methods, please see their implementations in https://github.com/dvdoug/BoxPacker/blob/1.x/src/Packer.php for a
guide on how to achieve the same results with v2.