Laravel - Setze globale Variable aus der Einstellungstabelle

8

Ich versuche, alle meine Einstellungen aus meiner settings Tabelle in eine globale Variable zu speichern, aber ich bin jetzt festgefahren (ich habe keine Ahnung, was der nächste Schritt ist), das ist mein aktuelles Modell und Sämaschine:

Modell - Einstellungen.php

%Vor%

seeder - SettingsTableSeeder.php

%Vor%

Wie kann ich alle Daten in der Settings-Tabelle speichern und dann von Blade oder einem beliebigen Controller oder View aus zugänglich machen?

Bearbeiten

Nun, meine Frage ist, wie kann ich einen oder mehrere Werte aus einem Formular aktualisieren?

Ich habe das eingerichtet:

Meine Route:

%Vor%

Mein Admin \ AdminConfiguracoesController:

%Vor%

Mein Einstellungsverzeichnis:

%Vor%

Meine Klingenform:

%Vor%

Aber die Dinge funktionieren nicht. Wie kann ich die Werte in die Tabelle aktualisieren?

    
Caio Kawasaki 07.12.2015, 04:41
quelle

3 Antworten

17

Siehe verbesserte Antwort in Update 2

Ich würde dafür einen dedizierten Dienstanbieter hinzufügen. Es liest alle in der Datenbank gespeicherten Einstellungen und fügt sie zur Laravels-Konfiguration hinzu. Auf diese Weise gibt es nur eine Datenbankanforderung für die Einstellungen und Sie können auf die Konfiguration in allen Controllern und Ansichten wie folgt zugreifen:

%Vor%

Schritt 1: Erstellen Sie den Dienstanbieter.

Sie können den Service Provider mit artisan erstellen:

php artisan make:provider SettingsServiceProvider

Dadurch wird die Datei app/Providers/SettingsServiceProvider.php erstellt.

Schritt 2: Fügen Sie dies der Boot-Methode des Providers hinzu, den Sie gerade erstellt haben:

%Vor%

Aus den Laravel-Dokumenten:

  

[Die Boot-Methode] wird aufgerufen, nachdem alle anderen Service-Provider registriert wurden, dh Sie haben Zugriff auf alle anderen Services, die vom Framework registriert wurden.

Ссылка

Schritt 3: Registrieren Sie den Anbieter in Ihrer App.

Fügen Sie diese Zeile dem providers -Array in config/app.php :

hinzu %Vor%

Und das ist es. Glückliche Kodierung!

Update: Ich möchte hinzufügen, dass die Boot-Methode die Abhängigkeitsinjektion unterstützt. Anstatt also \App\Setting fest zu codieren, könnten Sie ein Repository / eine Schnittstelle einfügen, die an das Repository gebunden ist. Das ist großartig zum Testen.

Update 2: Als Jeemusu in seinem Kommentar erwähnt , die App wird die Datenbank bei jeder Anfrage abfragen. Um dies zu verhindern, können Sie die Einstellungen zwischenspeichern. Es gibt grundsätzlich zwei Möglichkeiten, wie Sie das tun können.

  1. Legen Sie die Daten jedes Mal in den Cache, wenn der Administrator das Update durchführt Einstellungen.

  2. Merken Sie sich die Einstellungen im Cache für einige Zeit und löschen Sie den Cache jedes Mal, wenn der Administrator die Einstellungen aktualisiert.

Um mehr fehlertolerant zu denken, würde ich die zweite Option verwenden. Caches können unbeabsichtigt gelöscht werden. Die erste Option schlägt bei Neuinstallationen fehl, solange der Administrator die Einstellungen nicht vorgenommen hat oder Sie nach einem Serverabsturz neu installiert haben.

Ändern Sie für die zweite Option die Boot-Methode des Service Providers:

%Vor%

Jetzt müssen Sie nur den Cache vergessen, den Einstellungsschlüssel, nachdem der Administrator die Einstellungen aktualisiert:

%Vor%     
tommy 07.12.2015, 05:12
quelle
3

Um zu vermeiden, dass die Datenbank bei jeder Anfrage abgefragt wird, sollten Sie die Einstellungen bei jeder Änderung durch den Administrator / Benutzer in einer Konfigurationsdatei speichern.

%Vor%

Das obige erzeugt eine Laraval-kompatible Konfigurationsdatei, die im Wesentlichen nur ein Array von Schlüssel zurückgibt = & gt; Werte. Die generierte Datei wird ungefähr so ​​aussehen.

%Vor%

Jede PHP-Datei im Verzeichnis /config wird automatisch von Laravel und den Array-Variablen, die Ihrer Anwendung über den config() helper zugänglich sind, eingebunden:

%Vor%     
Jeemusu 07.12.2015 06:21
quelle
0

Sie können die Daten in der Datenbank speichern, so wie Sie es normalerweise in Laravel tun. \App\Setting::create() , \App\Setting::new() und andere Methoden.

Um die Werte in Blade zu verwenden, können Sie {{\App\Setting::where('name','title')->pluck('value')}}

verwenden

Und Sie können dafür auch Bereiche verwenden.

%Vor%

Dann könnten Sie \App\Setting::for('title')->pluck('value')

verwenden     
Curos 07.12.2015 05:09
quelle

Tags und Links