Installation
composer require baks-dev/reference-caps
Verify PHP 8.4+ compatibility in your composer.json or php --version.
First Use Case: Fetching a Cap Size
use BaksDev\ReferenceCaps\Facades\CapSize;
$size = CapSize::get('58-60'); // Returns a CapSize object or null
echo $size?->getDescription(); // e.g., "Medium"
Where to Look First
BaksDev\ReferenceCaps\Facades\CapSize (primary entry point).BaksDev\ReferenceCaps\ReferenceCapsServiceProvider (check config/reference-caps.php for defaults).config/reference-caps.php for the default size mappings or override via config/caps.php.Retrieving Cap Sizes
// By exact match (string)
$size = CapSize::find('58-60');
// By numeric range (int)
$size = CapSize::findByCircumference(58.5);
// As a collection (e.g., for dropdowns)
$allSizes = CapSize::all();
Integration with Eloquent Models
use BaksDev\ReferenceCaps\Traits\HasCapSize;
class Product extends Model
{
use HasCapSize;
protected $casts = [
'cap_size' => 'string', // or 'integer' if storing circumference
];
}
Dynamic Data Loading
Override the default data source in config/caps.php:
'sizes' => [
'58-60' => ['description' => 'Custom Medium', 'circumference' => 58.5],
// ...
],
Localization Extend descriptions or add translations via service provider booting:
public function boot()
{
CapSize::extendDescriptions([
'58-60' => __('custom.medium'),
]);
}
Case Sensitivity
'58-60') are case-sensitive. Use strtolower() if normalizing user input:
$size = CapSize::find(strtolower(trim($request->input('size'))));
Circumference Precision
findByCircumference() method uses a ±0.5 tolerance by default. Adjust in config:
'tolerance' => 0.3, // Stricter matching
Data Overrides
config/caps.php must mirror the default structure. Missing keys will throw InvalidArgumentException.Facade vs. Direct Class
use BaksDev\ReferenceCaps\CapSize as CapSizeClass;
$size = CapSizeClass::find('58-60'); // No facade caching
dd(CapSize::getAvailableSizes()); // Inspect loaded sizes
if (!$size = CapSize::find('58-60')) {
throw new \InvalidArgumentException("Size '58-60' not found. Available: " . implode(', ', array_keys(CapSize::getAvailableSizes())));
}
Custom Matching Logic Bind a custom resolver to the service provider:
public function boot()
{
CapSize::extendResolver(function ($query, $value) {
// Custom logic (e.g., fuzzy matching)
return CapSize::find(str_contains($value, 'medium') ? '58-60' : null);
});
}
Event Listeners Listen for size validation failures:
event(new CapSizeNotFound($request->input('size')));
API Responses Format sizes for APIs:
return response()->json([
'cap_size' => CapSize::find($request->size)?->toArray(),
]);
toArray() to return ['key' => '58-60', 'description' => 'Medium', 'circumference' => 58.5].
How can I help you explore Laravel packages today?