Laravel: Wo können globale Daten und Konstanten gespeichert werden?
Ich habe gerade angefangen zu arbeiten mit Laravel. Ich brauche zum umschreiben einer ganzen system habe ich vor einigen Jahren mit Laravel 4 als Basis-framework. In meinem alten system, das ich verwenden, um einen constant.php Datei mit einige Konstanten deklariert, und ein globals.php Datei, die enthalten viele array-sets (Zum Beispiel, Kategorien, Status, Art des events, langs, etc.). Dadurch, ich könnte so etwas wie
foreach ( $langs as $code => $domain ) {
//Some stuff
}
irgendwo in meinem app.
Meine Frage ist, wie kann ich das speichern, dass Informationen, die in der so genannten "laravel Weg". Ich habe versucht, mit irgendeiner Art von Objekt zu speichern diese info, diese Einstellung als service und erstellen für Sie eine Fassade:
app/libraries/Project/Constants.php
namespace PJ;
class Constants {
public static $langs = [
'es' => 'www.domain.es',
'en' => 'www.domain.us',
'uk' => 'www.domain.uk',
'br' => 'www.domain.br',
'it' => 'www.domain.it',
'de' => 'www.domain.de',
'fr' => 'www.domain.fr'
];
}
app/libraries/Project/ConstantsServiceProvider.php
namespace PJ;
use Illuminate\Support\ServiceProvider;
class ConstantsServiceProvider extends ServiceProvider {
public function register() {
$this->app->singleton('PJConstants', function() {
return new Constants;
});
}
}
app/libraries/Project/ConstantsFacade.php
namespace PJ;
use Illuminate\Support\Facades\Facade;
class ConstantsFacade extends Facade {
protected static function getFacadeAccessor() {
return 'PJConstants';
}
}
Komponist.json
"psr-4": {
"PJ\\": "app/libraries/Project"
},
und so habe ich Zugriff auf die Eigenschaft als PJ\Constants::$langs.
Dies funktioniert, aber ich bezweifle, es ist die effizienteste /Richtige Weg, es zu tun. Ich meine, es ist der richtige Weg zu "propagieren" eine variable erstellen, während Service-Provider und Fassaden und alle solche Sachen? Oder wo soll ich diese Daten?
Vielen Dank für jeden Rat.
EDIT # 01
Daten möchte ich weitergeben an alle Controller und views können direkt festgelegt werden, in Skript, wie in dem Beispiel am Anfang von meinem post, aber es kann auch generiert werden, dinamically, aus einer Datenbank zum Beispiel. Diese Daten könnten eine Liste von Kategorien. Ich brauche Sie in allen Ansichten zu generieren, die eine Navigationsleiste, aber ich brauche Sie, um zu definieren, einige routing-Muster (wie z.B. /Kategorie/Unterkategorie/Produkt), und auch zu analysieren, einige Infos in mehreren Controllern (Wie "get info" aus der Kategorie, hält X-Produkt).
Mein array ist so etwas wie:
$categories = [
1 => ['name' => 'General', 'parent' => 0, 'description' => 'Lorem ipsum...'],
2 => ['name' => 'Nature', 'parent' => 0, 'description' => 'Lorem ipsum...'],
3 => ['name' => 'World', 'parent' => 0, 'description' => 'Lorem ipsum...'],
4 => ['name' => 'Animals', 'parent' => 2, 'description' => 'Lorem ipsum...']
]
Nur als Beispiel. Index ist die id der Kategorie ein, und der Wert ist info Zusammenhang mit die Kategorie.
Brauche ich das array auch in allen Controllern und Views.
Also, wenn ich speichern Sie es als eine Config-variable, ist es ok? Oder wie könnte ich sonst speichert diese Daten? Was wäre eine beste und semantisch richtige Weg?
Dank
InformationsquelleAutor der Frage Marco Madueño Mejía | 2014-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für die meisten Konstanten, die Global in der gesamten Anwendung, der Speicherung in config-Dateien ausreichend ist. Es ist auch ziemlich einfach
Erstellen Sie eine neue Datei in der
app/config
- Verzeichnis. Nennen wir esconstants.php
Dort müssen Sie ein array zurückgeben des config-Werte.
Und Sie können Sie wie folgt
Und Sie können diese auch
Beachten Sie, dass die Werte, die Sie einstellen, nicht bestehen. Sie sind nur für die aktuelle Anfrage.
Update
Die config ist wohl nicht der richtige Ort zum speichern von Informationen aus der Datenbank generiert. Sie konnte einfach ein Eloquent Modell wie:
Und Abfrage aller Kategorien
Wenn das ganze Modell, was aus irgendeinem Grund nicht funktioniert, kannst du anfangen, darüber nachzudenken, erstellen Sie Ihre eigene Klasse und Fassade. Oder Sie könnte einfach erstellen Sie eine Klasse mit statischen Variablen und Methoden, und verwenden Sie es dann, ohne die Fassade Zeug.
InformationsquelleAutor der Antwort lukasgeiter
Für Konstanten
Erstellen constants.php Datei im config-Verzeichnis:-
Können Sie Sie verwenden, wie:-
Für Statische Arrays
Erstellen static_arrays.php Datei im config-Verzeichnis:-
Können Sie es verwenden, wie:-
Hinweis: Laravel umfasst alle config-Dateien automatisch, so dass keine Notwendigkeit von manuellen zählen 🙂
InformationsquelleAutor der Antwort Gagandeep Gambhir
Für Globale Konstanten in Laravel 5, mag ich nicht aufrufen Config für Sie. Definiere ich Sie in der Route-Gruppe wie dieser:
InformationsquelleAutor der Antwort Mladen Janjetovic
Ich denke, der beste Weg ist, um die Lokalisierung.
Erstellen Sie eine neue Datei
messages.php
imresources/lang/en
(en
denn das ist das, was in meinemconfig/app
'locale'=>'en'
)gibt ein array zurück, der alle Ihre Werte
abrufen für laravel 5.3 und unten
oder
5.4 verwenden
laravel 5.0 Lokalisierung
oder
laravel 5.4 Lokalisierung
InformationsquelleAutor der Antwort Bill Stephen
Nur um die obige Antwort, müssen Sie die config-Klasse, bevor Sie beginnen konnte, mit es in Laravel 5.3
InformationsquelleAutor der Antwort Jignesh Rawal
Atleast in Laravel 5.4, in der der Konstruktor Sie Sie erstellen können;
Dann können Sie anrufen wie Sie diese in Ihren Methoden;
Besonders nützlich für statische Methoden im Modell, etc...
Referenz https://laracasts.com/discuss/channels/general-discussion/class-apphttpcontrollersconfig-not-found
InformationsquelleAutor der Antwort blamb