Laravel Packages

Store Laravel Settings in a Database

Published
Store Laravel Settings in a Database image

Laravel Settings is a package by Spatie for storing strongly typed application settings in a repository and easily use them throughout your application.

Our newest package, laravel-settings, can be used to strongly type settings in a @laravelphp app.

Package: https://t.co/XbJbZDj0sg Blog post: https://t.co/opovTL39Bx

This is our second package release today! (First one: https://t.co/S2DG8zAucN) pic.twitter.com/k8DKt20THf

— Freek Van der Herten (@freekmurze) November 9, 2020

To help you visualize how you’ll eventually use this package, here’s an example of injecting a settings class in a controller and accessing settings:

class IndexController
{
public function __invoke(GeneralSettings $settings){
return view('index', [
'site_name' => $settings->site_name,
]);
}
}

This package is built around strongly-typed settings classes, so naturally, you’re probably curious what GeneralSettings looks like in the above example:

use Spatie\LaravelSettings\Settings;
 
class GeneralSettings extends Settings
{
public string $site_name;
 
public bool $site_active;
 
public static function group(): string
{
return 'general';
}
}

You’ll likely want to provide a way for admins to update settings, and you can do so by simply setting properties on the class and calling save:

$settings->site_name = $request->input('site_name');
$settings->site_active = $request->boolean('site_active');
 
$settings->save();

You can even use casts, such as the DateTimeInterfaceCast that ships with this package. The DateTimeInterfaceCast can be used for properties that are DateTime, Carbon, etc. types.

Repositories

The Laravel Settings package persists data using either a database (i.e., MySQL, PostgresSQL) or Redis. You can also create a custom repository type if you need to support something besides the provided repositories.

You can support multiple database repositories in one application by configuring more than one repository in the package’s settings. You can also mix and match between Redis and database repositories and define which repository a class should use.

Learn More

This package is chalked full of features not mentioned in this post. I encourage you to read through the project’s readme and Store strongly typed settings in a Laravel app on Freek Van der Herten’s blog.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
Laravel Auditor Audits Your App With Your Own AI Agent image

Laravel Auditor Audits Your App With Your Own AI Agent

Read article
A simple form builder that stays out of your way image

A simple form builder that stays out of your way

Read article
Laravel AI: Trace Agent Runs With Lifecycle Events image

Laravel AI: Trace Agent Runs With Lifecycle Events

Read article
Laravel AI: Get Raw HTTP Responses and Rate Limits image

Laravel AI: Get Raw HTTP Responses and Rate Limits

Read article
Agent Run Observability in Laravel AI SDK 0.11 image

Agent Run Observability in Laravel AI SDK 0.11

Read article
Debounced Queued Event Listeners in Laravel image

Debounced Queued Event Listeners in Laravel

Read article