Я только начал работать с Laravel. Мне нужно переписать целую систему, которую я создал несколько лет назад, используя Laravel 4 в качестве базовой структуры. В моей старой системе я использую файл констант .php с объявленными константами и файл globals.php, содержащий множество наборов массивов (например, статусы категорий, типы событий, языки и т.д.). Поступая таким образом, я мог бы использовать что-то вроде
foreach ( $langs as $code => $domain ) {
// Some stuff
}
где-нибудь в моем приложении.
Мой вопрос в том, как я могу хранить эту информацию в так называемом "laravel way". Я попытался использовать какой-то объект для хранения этой информации, установив это как сервис и создав для него фасад:
приложения/библиотеки/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'
];
}
приложения/библиотеки/Project/ConstantsServiceProvider.php
namespace PJ;
use Illuminate\Support\ServiceProvider;
class ConstantsServiceProvider extends ServiceProvider {
public function register() {
$this->app->singleton('PJConstants', function() {
return new Constants;
});
}
}
приложения/библиотеки/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"
},
и поэтому я получаю доступ к этому свойству как PJ\Constants:: $langs.
Это работает, но я сомневаюсь, что это самый эффективный/правильный способ сделать это. Я имею в виду, это правильный способ "размножать" переменную, создавая провайдера услуг и фасады и все такие вещи? Или где я должен помещать эти данные?
Спасибо за любой совет.
EDIT # 01
Данные, которые я хочу передать всем контроллерам и представлениям, могут быть напрямую установлены в script, как в примере в начале моего сообщения, , но он также может быть сгенерирован динамически, из базы данных, например. Эти данные могут быть списком категорий. Мне нужны они во всех представлениях для создания навигационной панели, но мне также нужно, чтобы они определяли некоторые шаблоны маршрутизации (например, категорию/подкатегорию/продукт), а также анализировали некоторую информацию в нескольких контроллерах (например, получите информацию из категории, которая содержит X).
Мой массив выглядит примерно так:
$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...']
]
Как пример. Индекс - это идентификатор категории, а значение - информация, связанная с категорией.
Мне нужен этот массив, также доступный во всех контроллерах и представлениях.
Итак, если я сохраню его как переменную Config, это нормально? Или как еще я могу хранить эти данные? Что было бы лучшим и семантически правильным способом?
Спасибо