Aller au contenu principal

← Présentation · Retour au README · Utilisation des paramètres →

Premiers pas

Prérequis​

  • PHP 8.3 ou version ultérieure.
  • Laravel 12 ou 13.

Installer le paquet​

composer require dragon-code/laravel-model-settings

Laravel détecte automatiquement le fournisseur de services du paquet.

Publiez la configuration et la migration, puis créez la table des paramètres :

php artisan vendor:publish --tag="model_settings"
php artisan migrate

Le tag model_settings publie config/model_settings.php et la migration du paquet. Par défaut, la migration crée une table settings sur la connexion de base de données par défaut de l’application.

Ajouter le trait​

Ajoutez HasSettings à chaque modèle Eloquent qui nécessite des paramètres :

namespace App\Models;

use DragonCode\LaravelModelSettings\Concerns\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
use HasSettings;
}

Le trait ajoute les méthodes publiques suivantes :

MéthodeUtilisation
settings()Lire ou modifier les paramètres effectifs d’un modèle enregistré
defaultSettings()Lire ou modifier les valeurs par défaut de la classe du modèle
modelSettings()Relation Eloquent utilisée pour le chargement anticipé

Enregistrer le premier paramètre​

Créez une valeur par défaut pour tous les modèles User enregistrés :

(new User)->defaultSettings()->set('timezone', 'UTC');

Remplacez cette valeur pour un utilisateur enregistré :

$user = User::query()->firstOrFail();

$user->settings()->set('timezone', 'Europe/Paris');

assert($user->settings()->get('timezone') === 'Europe/Paris');

Lisez tous les paramètres effectifs dans une collection indexée par le nom du paramètre :

$settings = $user->settings()->all();

assert($settings->get('timezone') === 'Europe/Paris');

Supprimez la surcharge pour revenir à UTC :

$user->settings()->forget('timezone');

assert($user->settings()->get('timezone') === 'UTC');

Enregistrer d’abord les modèles​

Utilisez settings()->set(), setMany(), forget(), forgetMany() et purge() uniquement après avoir enregistré le modèle parent. Pour un modèle non enregistré, settings()->get() renvoie null, settings()->has() renvoie false et settings()->all() une collection vide, même si la classe possède des valeurs par défaut. Chaque méthode de modification lève DragonCode\LaravelModelSettings\Exceptions\InvalidSettingsOwnerException avant toute requête de stockage.

Voir aussi​