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?
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?
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
:
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.
Legen Sie die Daten jedes Mal in den Cache, wenn der Administrator das Update durchführt Einstellungen.
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%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:
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')}}
Und Sie können dafür auch Bereiche verwenden.
%Vor% Dann könnten Sie \App\Setting::for('title')->pluck('value')
Tags und Links php laravel laravel-5.1