Validation
The library enforces strict validation to ensure all volume calculations are based on valid dimensional data.
Required Dimensions
Section titled “Required Dimensions”All three dimensions (length, width, height) are required for volume calculations:
use function Cline\Volume\volume;
// Valid - all three dimensions providedvolume([120, 80, 100]);volume(length: 120, width: 80, height: 100);
// Invalid - throws InvalidDimensionsExceptionvolume([120, 80]); // Only 2 dimensionsvolume(length: 120, width: 80); // Missing heightPositive Values Only
Section titled “Positive Values Only”All dimensions must be positive numbers (> 0):
// Valid - all positivevolume([120, 80, 100]);volume([0.1, 0.1, 0.1]);
// Invalid - throws InvalidDimensionsExceptionvolume([120, 0, 100]); // Zero dimensionvolume([120, -80, 100]); // Negative dimensionvolume([-1, -1, -1]); // All negativeArray Validation
Section titled “Array Validation”Indexed Arrays
Section titled “Indexed Arrays”Indexed arrays must contain exactly 3 values:
// Validvolume([120, 80, 100]);
// Invalid - throws InvalidDimensionsExceptionvolume([120]); // Too fewvolume([120, 80]); // Too fewvolume([120, 80, 100, 50]); // Too manyAssociative Arrays
Section titled “Associative Arrays”Associative arrays must use the exact keys: length, width, height:
// Validvolume(['length' => 120, 'width' => 80, 'height' => 100]);volume(['height' => 100, 'length' => 120, 'width' => 80]); // Order doesn't matter
// Invalid - throws InvalidDimensionsExceptionvolume(['l' => 120, 'w' => 80, 'h' => 100]); // Wrong keysvolume(['depth' => 100, 'width' => 80, 'height' => 100]); // 'depth' not 'length'Loading Meter Validation
Section titled “Loading Meter Validation”Loading meter calculations have additional parameter validation:
use Cline\Volume\ValueObjects\LoadingMeter;
// ValidLoadingMeter::fromCentimeters(120, 80, quantity: 1, stackingFactor: 1.0, truckWidth: 2.4);
// Invalid - throws InvalidLoadingMeterParameterExceptionLoadingMeter::fromCentimeters(120, 80, quantity: 0); // quantity < 1LoadingMeter::fromCentimeters(120, 80, quantity: -1); // quantity < 1LoadingMeter::fromCentimeters(120, 80, stackingFactor: 0); // stackingFactor <= 0LoadingMeter::fromCentimeters(120, 80, stackingFactor: -1); // stackingFactor <= 0LoadingMeter::fromCentimeters(120, 80, truckWidth: 0); // truckWidth <= 0Floor Meter Validation
Section titled “Floor Meter Validation”Floor meters require positive length and width:
use Cline\Volume\ValueObjects\FloorMeter;
// ValidFloorMeter::fromMeters(1.2, 0.8);FloorMeter::fromCentimeters(120, 80);
// Invalid - throws InvalidFloorDimensionsExceptionFloorMeter::fromMeters(0, 0.8); // Zero lengthFloorMeter::fromMeters(1.2, -0.8); // Negative widthException Types
Section titled “Exception Types”| Exception | Thrown When |
|---|---|
InvalidDimensionsException | Volume dimensions invalid (count, keys, values) |
InvalidFloorDimensionsException | Floor dimensions non-positive |
InvalidLoadingMeterParameterException | LDM parameters invalid |
Error Messages
Section titled “Error Messages”The library provides clear error messages for validation failures:
try { volume([120, 80]); // Missing height} catch (InvalidDimensionsException $e) { echo $e->getMessage(); // "3 dimensions required, 2 provided"}
try { volume([120, 0, 100]); // Zero width} catch (InvalidDimensionsException $e) { echo $e->getMessage(); // "All dimensions must be positive numbers"}
try { volume(['length' => 120, 'width' => 80]); // Missing height} catch (InvalidDimensionsException $e) { echo $e->getMessage(); // "Missing required dimension: height"}
try { LoadingMeter::fromCentimeters(120, 80, quantity: 0);} catch (InvalidLoadingMeterParameterException $e) { echo $e->getMessage(); // "Quantity must be at least 1"}Safe Handling Pattern
Section titled “Safe Handling Pattern”use Cline\Volume\Exceptions\InvalidDimensionsException;
function safeVolumeCalculation(array $dimensions): ?float{ try { return volume($dimensions)->meters()->value(); } catch (InvalidDimensionsException $e) { log_error("Invalid dimensions: " . $e->getMessage()); return null; }}
// Usage$result = safeVolumeCalculation($userInput);if ($result === null) { echo "Please provide valid dimensions (length, width, height > 0)";}