Настройки? Какие настройки?
Допустим, в нашем веб-приложении для Подкастов нам нужно вытащить список настроек, если мы хотим показать глобальное предупреждение на сайте, например, чтобы предупредить о времени обслуживания, новом шоу и т. д.
Итак, нам нужно добавить настройки с текстом предупреждения. Если текст пуст, то никакое предупреждение не будет показано.
По этой причине я создам Eloquent модель под названием “Setting” с миграцией, а затем добавлю столбцы “name” и “value”, причем последние будут иметь значение nullable.
php artisan make:model Setting --migration
После добавления столбцов в файл миграции я добавлю нужные параметры. В этом случае глобальное оповещение пользователей. Я сделал создал её в одном из Seeder файле:
Setting::create([ ‘name’ => ‘global_alert’, ‘value’ => null ]);
Довольно просто, а теперь небольшое волшебство...
Добавление настроек в глобальную конфигурацию
Laravel включает в себя удобную функцию под названием config(), которая предназначена для настройки каждой службы загрузки вашего приложения, например, кэша, базы данных и т. д.
Основное преимущество этой функции заключается в том, что она работает как геттер, если вы вводите только строку с точечной нотацией или абсолютно ничего, и как сеттер, если вы вводите массив.
Итак, давайте откроем AppServiceProvider и скажем Laravel, что когда приложение загрузится, то есть после того как загрузится, когда все остальные сервисы будут готовы, мы добавим в конфигурационный массив собственные настройки.
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
config([
'global' => Setting:all([
'name','value'
])
->keyBy('name') // key every setting by its name
->transform(function ($setting) {
return $setting->value // return only the value
})
->toArray() // make it an array
])
// ...
}
Затем конфигурация будет добавлена в список, вы можете это проверить с помощью dd(config()) вызвав эту команду после метода загрузки или где угодно в вашем приложении.
Вот в основном и все. При этом, вы могли бы:
В нашем HomeController я проверю, существует ли оповещение и пусто ли оно, прежде чем передать его в представление.
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$globalAlert = config('settings.global_alert');
return view('home', [
'globalAlert' => $globalAlert
]);
}
Затем в любом месте шаблона в <body> я добавлю условие if. PHP считает значение null ложным, поэтому, если на значении есть даже маленькая точка, оно будет считаться истинным.
@if($globalAlert)
<div class="alert alert-info small">
$globalAlert
</div>
@endif