PHPackages                             rawnoq/laravel-settings - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. rawnoq/laravel-settings

ActiveLibrary[Localization &amp; i18n](/categories/localization)

rawnoq/laravel-settings
=======================

A powerful Laravel package for managing application settings with full translatable support

1.0.2(5mo ago)065MITPHPPHP ^8.2

Since Nov 13Pushed 5mo agoCompare

[ Source](https://github.com/rawnoq/laravel-settings)[ Packagist](https://packagist.org/packages/rawnoq/laravel-settings)[ RSS](/packages/rawnoq-laravel-settings/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (7)Versions (5)Used By (0)

Laravel Settings
================

[](#laravel-settings)

[![Latest Version](https://camo.githubusercontent.com/c89fe8158ad31ec96cbd036042042849da239862065ef4dd256f745b21752d82/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7261776e6f712f6c61726176656c2d73657474696e67732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/rawnoq/laravel-settings)[![Total Downloads](https://camo.githubusercontent.com/7c41aab9ed47772ebe988a91d4e1f8e42e27c56308d6bebb8675a35c4c63355a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7261776e6f712f6c61726176656c2d73657474696e67732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/rawnoq/laravel-settings)[![License](https://camo.githubusercontent.com/81e580c43eeb630888ab6afc49853547d7c59c03712be165cb7bf269c98d15af/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7261776e6f712f6c61726176656c2d73657474696e67732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/rawnoq/laravel-settings)

A powerful and flexible Laravel package for managing application settings with full translatable support. This package provides an elegant solution for storing and retrieving settings with support for multiple languages, groups, and various data types.

Features
--------

[](#features)

- 🌍 **Full Translation Support** - Built on `astrotomic/laravel-translatable` for seamless multi-language settings
- 📦 **Group Management** - Organize settings into logical groups for better structure
- 🔧 **Flexible Value Types** - Support for strings, arrays, and translatable values
- 🚀 **Easy-to-Use Facade** - Simple and intuitive API for setting and getting values
- 🔍 **Advanced Querying** - Integrated with Spatie Query Builder for powerful filtering
- 📡 **API Ready** - Easy integration with RESTful APIs
- 🗄️ **Database Driven** - Persistent storage with automatic migrations
- ⚡ **Performance Optimized** - Efficient database queries with proper indexing

Requirements
------------

[](#requirements)

- PHP &gt;= 8.2
- Laravel &gt;= 12.0
- astrotomic/laravel-translatable &gt;= 12.0
- spatie/laravel-query-builder &gt;= 6.0

Installation
------------

[](#installation)

You can install the package via Composer:

```
composer require rawnoq/laravel-settings
```

The package will automatically register its service provider and facade.

### Configuration

[](#configuration)

Publish the configuration file:

```
php artisan vendor:publish --tag=settings-config
```

This will create a `config/settings.php` file where you can define default settings.

### Database Setup

[](#database-setup)

Publish and run the migrations:

```
php artisan vendor:publish --tag=settings-migrations
php artisan migrate
```

This will create the `settings` and `setting_translations` tables.

Quick Start
-----------

[](#quick-start)

### Using Helper Functions

[](#using-helper-functions)

The package provides convenient global helper functions:

```
// Set a setting
setting('site_name', 'My Awesome Site');

// Get a setting value
$siteName = setting('site_name');

// Set with group
setting('site_email', 'admin@example.com', 'general');

// Set translatable value
setting('site_title', [
    'en' => 'Welcome',
    'ar' => 'مرحباً',
]);

// Set multiple settings
settings([
    'site_name' => 'My Site',
    'site_email' => 'admin@example.com',
]);

// Seed using the default config/settings.php
settings()->seed();

// Seed using a custom config key
settings(null, 'custom.settings');

// Seed using an inline array structure
settings([
    'translatable' => [
        'general' => [
            'site_name' => [
                'en' => 'My Site',
                'ar' => 'موقعي',
            ],
            'site_description' => [
                'en' => 'A great website',
                'ar' => 'موقع رائع',
            ],
        ],
    ],
    'fixed' => [
        'general' => [
            'site_email' => 'admin@example.com',
            'phone_numbers' => ['+1234567890', '+0987654321'],
        ],
        'social' => [
            'facebook_url' => 'https://facebook.com/example',
            'twitter_url' => 'https://twitter.com/example',
        ],
    ],
]);

// Get all settings
$allSettings = settings()->all();
```

### Setting Values

[](#setting-values)

```
use Rawnoq\Settings\Facades\Settings;

// Set a simple string value
Settings::set('site_name', 'My Awesome Site');

// Set a translatable value
Settings::set('site_title', [
    'en' => 'Welcome to Our Site',
    'ar' => 'مرحباً بكم في موقعنا',
    'fr' => 'Bienvenue sur notre site',
]);

// Set a value with a group
Settings::set('site_email', 'admin@example.com', 'general');

// Set multiple values at once
Settings::setMany([
    'site_name' => 'My Site',
    'site_email' => 'admin@example.com',
    'site_phone' => '+1234567890',
]);
```

### Getting Values

[](#getting-values)

```
// Get a single setting
$setting = Settings::get('site_name');
$value = $setting->resolved_value; // Get the resolved value

// Get multiple settings
$settings = Settings::get(['site_name', 'site_email']);

// Get all settings
$allSettings = Settings::all();

// Get settings by group
$generalSettings = Settings::getByGroup('general');

// Get settings as key-value array
$settingsArray = Settings::getByGroupAsKeyValue('general');
// Returns: ['site_name' => 'My Site', 'site_email' => 'admin@example.com']
```

Usage Guide
-----------

[](#usage-guide)

### Value Types

[](#value-types)

#### Fixed Values

[](#fixed-values)

Fixed values are stored directly and are not translatable:

```
// Simple string
Settings::set('site_email', 'admin@example.com');

// Array (stored as JSON)
Settings::set('phone_numbers', [
    '+1234567890',
    '+0987654321',
]);

// The array will be automatically decoded when retrieved
$phones = Settings::get('phone_numbers')->resolved_value;
// Returns: ['+1234567890', '+0987654321']
```

#### Translatable Values

[](#translatable-values)

Translatable values are stored per locale and automatically detected when you pass an array with locale keys:

```
// The package automatically detects locale keys
Settings::set('site_title', [
    'en' => 'Site Title',
    'ar' => 'عنوان الموقع',
    'fr' => 'Titre du site',
    'es' => 'Título del sitio',
]);

// When retrieving, it returns the value for the current locale
$title = Settings::get('site_title')->resolved_value;
```

The package supports any locale code. When you pass an array with string keys, it will automatically be detected as a translatable value. Common locale codes include: `ar`, `en`, `fr`, `es`, `de`, `it`, `pt`, `ru`, `zh`, `ja`, `ko`, and any other locale code you need.

### Groups

[](#groups)

Organize your settings into logical groups:

```
// Add setting to a single group
Settings::set('site_name', 'My Site', 'general');

// Add setting to multiple groups
Settings::set('site_name', 'My Site', ['general', 'seo', 'social']);

// Retrieve all settings in a group
$generalSettings = Settings::getByGroup('general');

// Get as key-value array for easy access
$settings = Settings::getByGroupAsKeyValue('general');
// ['site_name' => 'My Site', 'site_email' => 'admin@example.com']
```

### Loading from Configuration

[](#loading-from-configuration)

You can preload settings from your configuration file:

```
// In config/settings.php
return [
    'translatable' => [
        'general' => [
            'site_name' => [
                'en' => 'My Site',
                'ar' => 'موقعي',
            ],
            'site_description' => [
                'en' => 'A great website',
                'ar' => 'موقع رائع',
            ],
        ],
    ],
    'fixed' => [
        'general' => [
            'site_email' => 'admin@example.com',
            'phone_numbers' => ['+1234567890', '+0987654321'],
        ],
        'social' => [
            'facebook_url' => 'https://facebook.com/example',
            'twitter_url' => 'https://twitter.com/example',
        ],
    ],
];

// Load settings from config
Settings::load(config('settings'));
```

### Seeding Example

[](#seeding-example)

You can seed your settings database using Laravel seeders and the `settings()->seed()` helper.

Create a seeder class (e.g. `database/seeders/SettingsSeeder.php`):

```
