Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Привет! Хочу поделиться своим пакетом, писал его для себя, но думаю, что может кому-то и пригодится.
Назначение: Позволяет быстро и легко создать структуру для хранения настроек сайта - например строковые данные, небольшие куски текста, булевы значения. Например в шапке у нас есть какой-то слоган, номер телефона и email - можно конечно жестко все это прописать в конфигурационном файле, минус тут если эти данные предполагается изменять, особенно не программисту, а обычному пользователю... можно конечно сделать таблицу в БД и CRUD к ней написать, но к каждой подобной мелочи писать что-то обычно лень. Исходя из этих соображений я написал этот пакет. Постарался сделать его как можно проще для дальнейшего пере-использования.
Ссылка на GitHub - easy-settings
Правда там описание на GoogleTranslateАнглийском , поэтому напишу здесь как ставить.
Установка
composer require alexusmai/easy-settings
Если у вас Laravel ниже версии 5.5, то добавьте в файл конфигурации провайдер и алиас
Alexusmai\EasySettings\EasySettingsServiceProvider::class,
// Alias
'ESettings' => Alexusmai\EasySettings\Facades\EasySettingsFacade::class,
Опубликуйте файл конфигурации самого пакета
php artisan vendor:publish --tag=easy-settings-config
Сама морда пакета написана на Vue.js, поэтому есть два варианта:
- Если у вас админка на Vue, вы можете установить npm пакет laravel-vue-easy-settings - описание по ссылке,
- Или вы можете воспользоваться уже скомпилированным-минимизированным файлом, для этого опубликуйте его
php artisan vendor:publish --tag=easy-settings-assets
Также необходимо выполнить миграцию, которая создаст новую таблицу easy_settings - в которой и будут хранится наши настройки.
php artisan migrate
Теперь настройка, откройте файл /config/easy-settings.php
Да - еще один момент - приложение позволяет хранить языковые конфиги, например у нас мульти-язычный сайт, и слоган в шапке сайта нужно хранить на нескольких языках, для этого есть тип "Lang", при его выборе возможно будет ввести для нужного поля различные переводы(количество языков можно установить в настройках)
/**
* Список языков (для переводов)
* add the necessary ones to create additional fields(field type "Lang")
*/
'languages' => ['en', 'ru'],
/**
* Development mode
* Show - edit/add settings group
*/
'dev' => true,
/**
* Save data to laravel cache
* The cache will not work in development mode
* set null, 0 - if you don't need cache (default)
* if you want use cache - set the number of minutes for which the value should be cached
*/
'cache' => null,
/**
* Middleware
* Add your middleware name to array -> ['web', 'auth', 'admin']
* !!!! RESTRICT ACCESS FOR NON ADMIN USERS !!!!
*/
'middleware' => ['web', 'auth']
Поясню некоторые моменты:
- dev mode - нужен при разработке, когда вы будете создавать нужные настройки, после его отключения пользователь сможет только редактировать содержимое созданных настроек, а удалить и т.п. что может повлиять на работоспособность сайта, не сможет.
- так как используется БД и все хранится там, то советую использовать кеш, что бы избежать кучи лишних запросов. Вместо null установите время жизни кеша в минутах. В dev mode кэш не работает!
- и самое главное нужно добавить свой middleware в массив, чтобы избежать не-авторизованного доступа к приложению
А теперь откройте view файл, в который вы хотите поместить приложение и добавьте:
- в <head> в meta нужно добавить csrf-token, если у вас он уже не добавлен.
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
- пакет использует стили Bootstrap4, если вы уже используете его, то ничего добавлять не надо. Иначе добавьте стили
<link href="{{ asset('vendor/easy-settings/css/esettings.css') }}" rel="stylesheet">
- ну и сам js файл с приложением на Vue
<script src="{{ asset('vendor/easy-settings/js/esettings.js') }}"></script>
А теперь в нужном вам месте добавьте div в котором и будет отрисовываться приложение
<div id="easy-settings-app"></div>
Использование
теперь вы можете создавать нужные группы настроек, сами настройки, задавать правила валидации и т.п.
В коде получать нужные данные можно с помощью фасада:
ESettings::get('groupName.settingsName');
ESettings::get('groupName.settingsName', $defaultValue);
- если выбран тип radios - то возвращается true или false в зависимости от выбранного значения.
- если выбран Lang тип - то результат будет зависить от текущей на момент вызова локали (Используется стандартный механизм Laravel), если нужного языка нет используется "fallback_locale" (/config/app.php)
Seeder
При разработке может потребоваться откатить БД и чтобы не потерять уже все внесенные в БД настройки можно сгенерировать seed файл, в котором они будут содержаться, единственное нужно не забыть это сделать!
php artisan esettings:seed
эта команда создаст seed EasySettingsSeeder, остается добавить его только в общий список (database/seeds/DatabaseSeeder.php)
Надеюсь кому нибудь пригодится!
Не в сети
Если работает, то норм.
Только code-style не PSR и \Cache::forget вызывается всегда, даже если кэш не включен.
config('easy-settings.cache') && !config('easy-settings.dev')
Одного конфига была мало, который отвечает за кэш?
if (count($array) < 2) trigger_error("Invalid key", E_USER_ERROR);
Ларавел ошибку обернет в Exception, давно не видел таких вызовов.
Изменено covobo (21.02.2018 18:48:11)
Не в сети
Спасибо большое, что не поленились посмотреть код. Есть несколько вопросов:
- code-style - это имеется в виду оформление кода? Может есть, что толковое почитать по этому поводу?
Ларавел ошибку обернет в Exception, давно не видел таких вызовов.
А можно подробнее, что не правильно? Я хотел, чтоб была ошибка, я не так это сделал?
Одного конфига была мало, который отвечает за кэш?
Я так сделал, чтоб в dev mode cache не работал, чтоб в нескольких местах не приходилось менять значения.
\Cache::forget вызывается всегда, даже если кэш не включен.
Ага, увидел, спасибо.
Upd. Исправил ошибки.
Изменено alexus (25.02.2018 17:18:01)
Не в сети
А можно подробнее, что не правильно? Я хотел, чтоб была ошибка, я не так это сделал?
Может у кого-то другое мнение, но, я считаю, что trigger_error - это моветон. К тому же эта ошибка все равно обернется в Exception. Почему бы сразу не выкидывать типизированное исключение?
Я так сделал, чтоб в dev mode cache не работал, чтоб в нескольких местах не приходилось менять значения.
dev мод следует переименовать, что-то типа "only read mode".
А для кэша - оставить один конфиг.
Мне кажется для большинства - так будет удобней.
- code-style - это имеется в виду оформление кода? Может есть, что толковое почитать по этому поводу?
https://www.php-fig.org/psr/psr-2/
Если у вас PHPSTORM - то проще настроить автоформатер, PSR-2 уже встроен в phpstorm, надо только выбрать.
Не в сети
Страницы 1