Mysql
 sql >> Database >  >> RDS >> Mysql

Modello di impostazioni globali di Laravel

Potresti creare un fornitore di servizi, ad esempio SettingsServiceProvider , che carica tutte le impostazioni dal database e quindi le memorizza nella cache. Quindi, nei successivi caricamenti della pagina, potrebbe restituire valori di impostazione memorizzati nella cache anziché eseguire query sul database, di cui dovresti essere giustamente preoccupato.

Qualcosa di semplice come:

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();
            });
        });
    }
}

Supponendo che il tuo modello di impostazioni si chiami Setting secondo le convenzioni di denominazione di Laravel. È quindi possibile accedere alle impostazioni in questo modo:

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

Se desideri un modo più carino per accedere alle impostazioni, puoi creare una funzione di supporto:

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

Il che renderebbe l'utilizzo in questo modo:

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

Quasi emulando config() utilizzo della funzione di supporto.