.json). public const CATEGORIE = [ 'finestre' => 'Finestre', 'porte' => 'Porte', 'scorrevoli' => 'Scorrevoli', 'scuretti' => 'Scuretti', 'accessori' => 'Accessori', ]; // Moduli dati caricati dal configuratore per il modello. public const MODULI = [ 'listino' => 'Listino', 'modello' => 'Finiture', 'maniglia' => 'Maniglia', 'altezza_maniglia' => 'Altezza maniglia', 'vetro' => 'Vetro', 'cerniere' => 'Cerniere', 'telaio' => 'Telaio', 'avvolgibile' => 'Avvolgibile', 'select_finiture' => 'Select finiture', ]; protected $fillable = [ 'sistema_id', 'codice', 'nome', 'descrizione', 'icona', 'ordine', 'attivo', 'cartella', 'file_modello', 'categoria', 'cartella_texture', 'moduli', ]; protected $casts = [ 'ordine' => 'integer', 'attivo' => 'boolean', 'moduli' => 'array', ]; public function sistema(): BelongsTo { return $this->belongsTo(Sistema::class); } public function scopeAttivi(Builder $query): Builder { return $query->where('attivo', true)->orderBy('ordine')->orderBy('id'); } public function getIconaUrlAttribute(): ?string { return $this->icona ? Storage::disk('public')->url($this->icona) : null; } protected static function booted(): void { // Rimuove il file dell'icona sostituita o del modello eliminato. static::updated(function (Modello $modello): void { $vecchia = $modello->getOriginal('icona'); if ($modello->wasChanged('icona') && $vecchia) { Storage::disk('public')->delete($vecchia); } }); static::deleted(function (Modello $modello): void { if ($modello->icona) { Storage::disk('public')->delete($modello->icona); } }); } }