PHP code example of salehye / settings

1. Go to this page and download the library: Download salehye/settings library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

salehye / settings example snippets


use Salehye\Settings\Http\Middleware\ShareSettingsMiddleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->web(append: [
            ShareSettingsMiddleware::class,
        ]);
    })
    ->withProviders();

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

// Set a setting
set_setting('site_name', 'My Website');

// Get group
$general = settings_group('general');

// Get public settings
$public = settings_public();

// Get all settings
$all = settings_all();

// With default value
$timezone = settings('timezone', 'UTC');

use Salehye\Settings\Facades\Settings;

// Get
$value = Settings::get('site_name');
$value = Settings::get('site_name', 'Default');

// Set
Settings::set('site_name', 'My Website');

// Multiple
$settings = Settings::getMany(['site_name', 'timezone']);
Settings::setMany([
    'site_name' => 'My Site',
    'timezone' => 'Asia/Riyadh',
]);

// Group
$general = Settings::group('general');

// Public
$public = Settings::public();

// All
$all = Settings::all();

// Check
if (Settings::has('site_name')) {
    // ...
}

// Delete
Settings::delete('site_name');

// Cache
Settings::clearCache();
Settings::reload();

use Salehye\Settings\Facades\Settings;

// Magic getter
$siteName = Settings::$site_name;

// Magic isset
if (isset(Settings::$site_name)) {
    // ...
}

// Invoke as function
$value = Settings('site_name');
$value = Settings('site_name', 'default');
$all = Settings(); // Returns all settings

use Salehye\Settings\Concerns\HasSettings;

class MyController extends Controller
{
    use HasSettings;

    public function index()
    {
        $siteName = $this->getSetting('site_name');
        $this->setSetting('timezone', 'UTC');

        $settings = $this->getSettings(['site_name', 'timezone']);
        $general = $this->getSettingsGroup('general');
        $public = $this->getPublicSettings();
        $all = $this->getAllSettings();

        if ($this->hasSetting('site_name')) {
            // ...
        }

        $this->deleteSetting('old_setting');
        $this->clearSettingsCache();
    }
}

use Salehye\Settings\SettingsManager;
use Salehye\Settings\Contracts\SettingsRepositoryInterface;

class MyService
{
    public function __construct(
        protected SettingsManager $settings,
        // OR
        protected SettingsRepositoryInterface $repository
    ) {}

    public function doSomething(): void
    {
        $value = $this->settings->get('site_name');
        // OR
        $value = $this->repository->get('site_name');
    }
}

Schema::create('settings', function (Blueprint $table) {
    $table->id();
    $table->string('key')->unique()->index();
    $table->string('group')->default('general')->index();
    $table->boolean('is_public')->default(false)->index();
    $table->json('value')->nullable();
    $table->timestamps();

    $table->index(['group', 'is_public']);
});

use Salehye\Settings\Models\Setting;

// Simple setting
Setting::create([
    'key' => 'site_name',
    'group' => 'general',
    'is_public' => true,
    'value' => 'My Website',
]);

// JSON setting
Setting::create([
    'key' => 'social_links',
    'group' => 'social',
    'is_public' => true,
    'value' => [
        'twitter' => 'https://twitter.com/mysite',
        'facebook' => 'https://facebook.com/mysite',
    ],
]);

// Boolean setting
Setting::create([
    'key' => 'maintenance_mode',
    'group' => 'system',
    'is_public' => false,
    'value' => false,
]);

'definitions' => [
    'site_name' => [
        'type' => 'string',
        'group' => 'general',
        'is_public' => true,
        'default' => 'My Website',
        'rules' => ['nullable', 'string', 'max:255'],
        'translations' => [
            'ar' => 'اسم الموقع',
            'en' => 'Site Name',
        ],
    ],
],

// routes/web.php
use Salehye\Settings\Http\Controllers\SettingsController;

Route::middleware(['auth'])->group(function () {
    Route::get('/settings', [SettingsController::class, 'index']);
    Route::get('/settings/{group}', [SettingsController::class, 'show']);
    Route::put('/settings', [SettingsController::class, 'update']);
});

// config/settings.php
'cache' => [
    'enabled' => true,
    'ttl' => 3600, // 1 hour
    'key' => 'settings_cache',
],

// config/settings.php
'inertia' => [
    'share_public' => true,      // Auto-share public settings
    'key_name' => 'settings',    // Key name in Inertia props
],

// Boolean
Setting::create([
    'key' => 'maintenance_mode',
    'value' => true, // Stored as boolean
]);

// JSON/Array
Setting::create([
    'key' => 'features',
    'value' => ['dark_mode' => true, 'notifications' => false],
]);

// Integer
Setting::create([
    'key' => 'posts_per_page',
    'value' => 10,
]);

use Salehye\Settings\Contracts\SettingsRepositoryInterface;

class MyService
{
    public function __construct(
        protected SettingsRepositoryInterface $settings
    ) {}

    public function doSomething(): void
    {
        $value = $this->settings->get('my_setting');
    }
}

// Clear cache after bulk updates
Settings::clearCache();

// Reload from database
Settings::reload();

// database/seeders/SettingsSeeder.php
use Salehye\Settings\Models\Setting;

public function run(): void
{
    $settings = [
        ['key' => 'site_name', 'group' => 'general', 'is_public' => true, 'value' => 'My Website'],
        ['key' => 'site_description', 'group' => 'general', 'is_public' => true, 'value' => 'Welcome to my site'],
        ['key' => 'timezone', 'group' => 'general', 'is_public' => false, 'value' => 'Asia/Riyadh'],
        ['key' => 'maintenance_mode', 'group' => 'system', 'is_public' => false, 'value' => false],
        ['key' => 'contact_email', 'group' => 'contact', 'is_public' => true, 'value' => '[email protected]'],
        ['key' => 'social_twitter', 'group' => 'social', 'is_public' => true, 'value' => ''],
        ['key' => 'social_facebook', 'group' => 'social', 'is_public' => true, 'value' => ''],
    ];

    foreach ($settings as $setting) {
        Setting::firstOrCreate(['key' => $setting['key']], $setting);
    }
}

// Backend
$siteName = Settings::get('site_name');

// Frontend (Inertia)
const { site_name } = usePage().props.settings;
bash
php artisan migrate
bash
php artisan vendor:publish --tag=settings-views
bash
php artisan db:seed --class=SettingsSeeder

salehye/settings/
├── config/
│   └── settings.php
├── database/
│   ├── factories/
│   │   └── SettingFactory.php
│   └── migrations/
│       └── create_settings_table.php
├── src/
│   ├── Contracts/
│   │   └── SettingsRepositoryInterface.php
│   ├── Facades/
│   │   └── Settings.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   └── SettingsController.php
│   │   └── Middleware/
│   │       └── ShareSettingsMiddleware.php
│   ├── Models/
│   │   └── Setting.php
│   ├── Repositories/
│   │   └── SettingsRepository.php
│   ├── Services/
│   │   └── SettingsService.php
│   ├── SettingsManager.php
│   └── SettingsServiceProvider.php
└── tests/