Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel-Modell für globale Einstellungen

Sie könnten einen Dienstanbieter erstellen, sagen Sie SettingsServiceProvider , die alle Einstellungen aus der Datenbank lädt und sie dann zwischenspeichert. Dann könnte es bei nachfolgenden Seitenladevorgängen zwischengespeicherte Einstellungswerte zurückgeben, anstatt die Datenbank abzufragen, worüber Sie sich zu Recht Sorgen machen sollten.

Etwas so Einfaches wie:

class SettingsServiceProvider extends ServiceProvider
{
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('settings', function ($app) {
            return $app['cache']->remember('site.settings', 60, function () {
                return Setting::pluck('value', 'key')->toArray();
            });
        });
    }
}

Angenommen, Ihr Einstellungsmodell heißt Setting gemäß Laravels Namenskonventionen. Sie können dann wie folgt auf die Einstellungen zugreifen:

<h1>{{ array_get(app('settings'), 'site.name') }}</h1>

Wenn Sie eine schönere Art des Zugriffs auf die Einstellungen wünschen, könnten Sie eine Hilfsfunktion erstellen:

function setting($key)
{
    return array_get(app('settings'), $key);
}

Was würde so verwendet werden:

<h1>{{ setting('site.name') }}</h1>

Emuliert fast die config() Verwendung der Hilfsfunktion.