Właśnie zacząłem pracować z Laravelem. Muszę przepisać cały system, który zrobiłem kilka lat temu, używając Laravel 4 jako podstawy. W moim starym systemie miałem constant.php
plik z zadeklarowanymi stałymi i globals.php
plik, który zawierał wiele zestawów tablic (na przykład statusy kategorii, typy zdarzeń, języki itp.). Robiąc to, mógłbym użyć czegoś takiego
foreach ( $langs as $code => $domain ) {
// Some stuff
}
w dowolnym miejscu mojej aplikacji.
Moje pytanie brzmi, jak mogę przechowywać te informacje w tak zwany „laravel way”. Próbowałem użyć jakiegoś obiektu do przechowywania tych informacji, ustawiając to jako usługę i tworząc dla niego fasadę:
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';
}
}
composer.json
"psr-4": {
"PJ\\": "app/libraries/Project"
},
więc mam dostęp do tej właściwości jako PJ\Constants::$langs
.
To działa, ale wątpię, czy jest to najbardziej efektywny lub poprawny sposób na zrobienie tego. Chodzi mi o to, czy jest to właściwy sposób na „propagowanie” zmiennej poprzez tworzenie całego usługodawcy, fasad i tego typu rzeczy? Albo gdzie mam umieścić te dane?
Dzięki za każdą radę.
EDYCJA # 01
Dane, które chcę przekazać do wszystkich kontrolerów i widoków można ustawić bezpośrednio w skrypcie, jak w przykładzie na początku mojego wpisu, ale można je też generować dynamicznie, np. Z bazy danych. Te dane mogą być listą kategorii. Potrzebuję ich we wszystkich widokach, aby wygenerować pasek nawigacji, ale potrzebuję ich również do zdefiniowania niektórych wzorców routingu (takich jak /category/subcategory/product
), a także do przeanalizowania niektórych informacji w kilku kontrolerach (na przykład uzyskanie informacji z kategorii, która zawiera produkt X).
Moja tablica to coś takiego:
$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...']
]
Jako przykład. Indeks to identyfikator kategorii, a wartość to informacje skojarzone z kategorią.
Potrzebuję tej tablicy, również dostępnej we wszystkich kontrolerach i widokach.
Czy powinienem zatem zapisać go jako zmienną konfiguracyjną? Jak inaczej mógłbym przechowywać te dane; jaki byłby najlepszy i poprawny semantycznie sposób?