Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 21.02.2018 18:31:32

Пакет для Laravel - Easy Settings

Привет! Хочу поделиться своим пакетом, писал его для себя, но думаю, что может кому-то и пригодится.
Назначение: Позволяет быстро и легко создать структуру для хранения настроек сайта - например строковые данные, небольшие куски текста, булевы значения. Например в шапке у нас есть какой-то слоган, номер телефона и email - можно конечно жестко все это прописать в конфигурационном файле, минус тут если эти данные предполагается изменять, особенно не программисту, а обычному пользователю... можно конечно сделать таблицу в БД и CRUD к ней написать, но к каждой подобной мелочи писать что-то обычно лень. Исходя из этих соображений я написал этот пакет. Постарался сделать его как можно проще для дальнейшего пере-использования.

68747470733a2f2f7261772e6769746875622e636f6d2f616c657875736d61692f6c61726176656c2d7675652d656173792d73657474696e67732f6d61737465722f7372632f6173736574732f6573657474696e67732e6769663f7261773d74727565

Ссылка на GitHub - easy-settings
Правда там описание на GoogleTranslateАнглийском smile, поэтому напишу здесь как ставить.

Установка

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)

Надеюсь кому нибудь пригодится!

Не в сети

#2 21.02.2018 18:43:44

Re: Пакет для Laravel - Easy Settings

Если работает, то норм.

Только 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)

Не в сети

#3 21.02.2018 19:49:38

Re: Пакет для Laravel - Easy Settings

Спасибо большое, что не поленились посмотреть код. Есть несколько вопросов:
- code-style - это имеется в виду оформление кода? Может есть, что толковое почитать по этому поводу?

Ларавел ошибку обернет в Exception, давно не видел таких вызовов.

А можно подробнее, что не правильно? Я хотел, чтоб была ошибка, я не так это сделал?

Одного конфига была мало, который отвечает за кэш?

Я так сделал, чтоб в dev mode cache не работал, чтоб в нескольких местах не приходилось менять значения.

\Cache::forget вызывается всегда, даже если кэш не включен.

Ага, увидел, спасибо.

Upd. Исправил ошибки.

Изменено alexus (25.02.2018 17:18:01)

Не в сети

#4 21.02.2018 19:55:43

Re: Пакет для Laravel - Easy Settings

А можно подробнее, что не правильно? Я хотел, чтоб была ошибка, я не так это сделал?

Может у кого-то другое мнение, но, я считаю, что trigger_error - это моветон. К тому же эта ошибка все равно обернется в Exception. Почему бы сразу не выкидывать типизированное исключение?

Я так сделал, чтоб в dev mode cache не работал, чтоб в нескольких местах не приходилось менять значения.

dev мод следует переименовать, что-то типа "only read mode".
А для кэша - оставить один конфиг.
Мне кажется для большинства - так будет удобней.

- code-style - это имеется в виду оформление кода? Может есть, что толковое почитать по этому поводу?

https://www.php-fig.org/psr/psr-2/

Если у вас PHPSTORM - то проще настроить автоформатер, PSR-2 уже встроен в phpstorm, надо только выбрать.

Не в сети

Подвал раздела