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