Download the PHP package andydefer/laravel-casts without Composer
On this page you can find all versions of the php package andydefer/laravel-casts. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/laravel-casts
More information about andydefer/laravel-casts
Files in andydefer/laravel-casts
Package laravel-casts
Short Description Advanced Eloquent casts for Laravel including Money and JSON handling
License MIT
Informations about the package laravel-casts
Laravel Eloquent Casts
Advanced Eloquent casts for Laravel including Money and JSON handling
Installation
Prérequis
- PHP 8.1 ou supérieur
- Laravel 12.x, 13.x, 14.x ou 15.x
Casts disponibles
| Cast | Description | Stockage DB | Affichage |
|---|---|---|---|
MoneyCast |
Montants monétaires | Integer (centimes) | Float (euros/dollars) |
JsonCast |
Données structurées | JSON string | PHP array |
MoneyCast
Le MoneyCast convertit automatiquement les montants monétaires entre les centimes (stockage en base de données) et les euros/dollars (affichage dans l'application).
Pourquoi ?
Stockez vos prix en centimes (entiers) pour éviter les problèmes de précision des nombres flottants en base de données.
Utilisation
Exemple
Gestion des arrondis
Valeurs négatives
Requêtes
JsonCast
Le JsonCast convertit automatiquement les chaînes JSON en tableaux PHP et vice-versa.
Pourquoi ?
Manipulez naturellement des données JSON en PHP sans avoir à gérer manuellement l'encodage/décodage.
Utilisation
Exemple
Conservation des JSON existants
Si vous stockez déjà une chaîne JSON valide, elle est préservée :
Gestion des erreurs
Les JSON invalides retournent null au lieu de planter :
Décodage non-tableau
Si un JSON décodé n'est pas un tableau, un tableau vide est retourné :
Installation dans un modèle existant
Migration avec MoneyCast
Migration avec JsonCast
Tests
Le package inclut une suite complète de tests unitaires.
Exécution des tests
Couverture des tests MoneyCast
| Test | Description |
|---|---|
test_get_converts_cents_to_euros_with_two_decimals |
Conversion centimes → euros |
test_get_rounds_cents_correctly |
Arrondi des centimes |
test_get_handles_large_amounts |
Grands montants |
test_get_handles_negative_amounts |
Valeurs négatives |
test_get_returns_null_when_value_is_null |
Valeurs nulles |
test_set_converts_euros_to_cents |
Conversion euros → centimes |
test_set_rounds_cents_correctly |
Arrondi des euros |
test_null_values_are_preserved_through_round_trip |
Préservation des nulls |
Couverture des tests JsonCast
| Test | Description |
|---|---|
test_get_returns_null_when_value_is_null |
Valeurs nulles |
test_get_decodes_valid_json_string_to_array |
Décodage JSON valide |
test_get_returns_null_when_json_string_is_invalid |
JSON invalide |
test_set_converts_array_to_json_string |
Conversion tableau → JSON |
test_set_throws_json_exception_for_non_encodable_values |
Valeurs non encodables |
Exemples complets
E-commerce : Gestion des prix
Configuration utilisateur avancée
Inventaire avec attributs variables
Performance
| Cast | Opération | Impact |
|---|---|---|
MoneyCast |
Conversion int ↔ float | Minime (opérations mathématiques simples) |
JsonCast |
Encodage/décodage JSON | Modéré (dépend de la taille des données) |
API Reference
MoneyCast
| Méthode | Type | Description |
|---|---|---|
get(Model $model, string $key, mixed $value, array $attributes) |
?float |
Convertit les centimes → euros |
set(Model $model, string $key, mixed $value, array $attributes) |
?int |
Convertit les euros → centimes |
JsonCast
| Méthode | Type | Description |
|---|---|---|
get(Model $model, string $key, mixed $value, array $attributes) |
?array |
JSON → tableau PHP |
set(Model $model, string $key, mixed $value, array $attributes) |
?string |
Tableau PHP → JSON |
Limitations
MoneyCast
- Précision fixe à 2 décimales (euros/cents)
- Ne gère pas les devises avec plus de 2 décimales (ex: Koweït Dinar)
- Valeur max : ~21 millions d'euros avec stockage sur 32 bits
JsonCast
- La taille des JSON est limitée par MySQL (max 1 Go pour type JSON)
- Les tableaux très profonds (> 512 niveaux) sont tronqués
- Les ressources PHP ne peuvent pas être encodées (exception levée)
Contribuer
- Fork le repository
- Créer une branche (
git checkout -b feature/amazing-feature) - Commiter les changements (
git commit -m 'feat: add amazing feature') - Pusher (
git push origin feature/amazing-feature) - Ouvrir une Pull Request
Développement
Licence
MIT © Andy Defer