Ich habe gerade angefangen mit Laravel zu arbeiten. Ich muss ein ganzes System, das ich vor einigen Jahren erstellt habe, neu schreiben und Laravel 4 als Basis-Framework verwenden. In meinem alten System hatte ich eine constant.php
Datei mit einigen deklarierten Konstanten und eine globals.php
Datei, die viele Array-Sets enthielt (z. B. Kategoriestatus, Ereignistyp, langs usw.). Auf diese Weise könnte ich so etwas gebrauchen
foreach ( $langs as $code => $domain ) {
// Some stuff
}
überall in meiner App.
Meine Frage ist, wie ich diese Informationen auf die sogenannte "Laravel-Art" speichern kann. Ich habe versucht, diese Informationen mit einem Objekt zu speichern, als Service festzulegen und dafür eine Fassade zu erstellen:
app / library / 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 / library / 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 / library / Project / ConstantsFacade.php
namespace PJ;
use Illuminate\Support\Facades\Facade;
class ConstantsFacade extends Facade {
protected static function getFacadeAccessor() {
return 'PJConstants';
}
}
composer.json
"psr-4": {
"PJ\\": "app/libraries/Project"
},
und so greife ich auf diese Eigenschaft als zu PJ\Constants::$langs
.
Dies funktioniert, aber ich bezweifle, dass dies die effizienteste oder korrekteste Methode ist. Ich meine, ist es der richtige Weg, eine Variable zu "verbreiten", indem ein ganzer Dienstleister und Fassaden und all diese Dinge erstellt werden? Oder wo soll ich diese Daten ablegen?
Vielen Dank für jeden Rat.
EDIT # 01
Daten, die ich an alle Controller und Ansichten übergeben möchte, können direkt im Skript festgelegt werden, wie im Beispiel am Anfang meines Beitrags, aber sie können auch dynamisch generiert werden, beispielsweise aus einer Datenbank. Diese Daten können eine Liste von Kategorien sein. Ich benötige sie in allen Ansichten, um eine Navigationsleiste zu generieren, aber ich benötige sie auch, um einige Routing-Muster (wie /category/subcategory/product
) zu definieren und um einige Informationen in mehreren Controllern zu analysieren (wie zum Beispiel Informationen aus der Kategorie abrufen, die das X-Produkt enthält).
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, und der Wert ist die der Kategorie zugeordnete Information.
Ich benötige dieses Array auch, das in allen Controllern und Ansichten verfügbar ist.
Soll ich es also als Konfigurationsvariable speichern? Wie könnte ich diese Daten sonst speichern? Was wäre der beste und semantisch korrekte Weg?