Настройка и конфигурация плагина
# Введение
Существует два способа настройки плагина: при помощи форм в административном интерфейсе и при помощи файлов конфигурации. Формы предоставляют больше возможностей, но их применение требует особых знаний. Поэтому на начальном этапе разработки лучше использовать файлы с настройками.
# Настройка базы данных
Вы можете создавать модели для хранения настроек в БД при помощи реализации поведения SettingsModel
в классе модели. Эта модель может быть также использована для создания форм с настройками в административной части сайта. Вам не нужно самим создавать таблицы в базе данных и контроллеры для создания форм.
Класс с настройками модели должен расширять класс Model
и реализовывать поведение System.Behaviors.SettingsModel
. Модели с настройками, так же как и другие модели, должны находиться в подпапке models плагина. Модель в следующем примере должна находиться в plugins/acme/demo/models/Settings.php
.
<?php namespace Acme\Demo\Models;
use Model;
class Settings extends Model
{
public $implement = ['System.Behaviors.SettingsModel'];
// A unique code
public $settingsCode = 'acme_demo_settings';
// Reference to field configuration
public $settingsFields = 'fields.yaml';
}
Свойство $settingsCode
является обязательным для модели с настройками. Оно содержит уникальный ключ, который используется для сохранения настроек в базе данных.
Свойство $settingsFields
также является обязательным, если Вы собираетесь добавить форму с настройками, используя эту модель. Свойство содержит имя YAML файла, в котором находится описание полей. Этот файл должен находиться в папке, название которой совпадает с названием класса модели. Для предыдущего примера структура папок должна выглядеть так:
plugins/
acme/
demo/
models/
settings/ <=== Папка модели
fields.yaml <=== Поля
Settings.php <=== Файл с классом
Модели с настройками могут быть зарегистрированы в регистрационном файле плагина, чтобы они появились на странице с настройками, но это не обязательно. Вы можете задавать и получать значения так же, как и в любых других моделях.
# Запись в модель с настройками
Модель с настройками имеет статический метод set
, который позволяет сохранить отдельные или множественные значения. Вы также можете использовать стандартные функции модели для записи свойств модели и сохранения самой модели. Пример:
use Acme\Demo\Models\Settings;
...
// Set a single value
Settings::set('api_key', 'ABCD');
// Set an array of values
Settings::set(['api_key' => 'ABCD']);
// Set object values
$settings = Settings::instance();
$settings->api_key = 'ABCD';
$settings->save();
# Чтение из модели с настройками
Модель с настройками имеет статический метод get
, который позволяет получать отдельные значения. Кроме того, при создании экземпляра класса модели при помощи метода instance
, Вы можете напрямую получить значения из БД.
// Outputs: ABCD
echo Settings::instance()->api_key;
// Get a single value
echo Settings::get('api_key');
// Get a value and return a default value if it doesn't exist
echo Settings::get('is_activated', true);
# Страницы с настройками
В административной части сайта находится специальный раздел с настройками и конфигурациями. В него можно попасть, если кликнуть на ссылку Settings (Настройки) в главном меню. Эта страница содержит список ссылок на странице с настройками, которые зарегистрированы системой или плагинами.
# Добавление ссылки на страницу с настройками в меню
Список ссылок на страницы с настройками может быть изменен при помощи метода registerSettings
внутри класса регистрации плагина. Когда Вы добавляете новую ссылку, то у Вас есть два пути: создать ссылку на определенную страницу или на страницу с моделью. В следующем примере показано, как создать ссылку на страницу:
public function registerSettings()
{
return [
'location' => [
'label' => 'Locations',
'description' => 'Manage available user countries and states.',
'category' => 'Users',
'icon' => 'icon-globe',
'url' => Backend::url('acme/user/locations'),
'order' => 500,
'keywords' => 'geography place placement'
]
];
}
Примечание: Страницы с настройками должны определять контекст для того, чтобы отметить соответствующий пункт в меню. Для модели контекст определяется автоматически.
Следующий пример показывает, как создать ссылку на модель с настройками.
public function registerSettings()
{
return [
'settings' => [
'label' => 'User Settings',
'description' => 'Manage user based settings.',
'category' => 'Users',
'icon' => 'icon-cog',
'class' => 'Acme\User\Models\Settings',
'order' => 500,
'keywords' => 'security location',
'permissions' => ['acme.users.access_settings']
]
];
}
Произвольный параметр keywords
используется для поиска. Если он не задан, то поиск будет производиться по метке и описанию.
# Настройка контекста
Как и в контроллере, страница с настройками должна определять контекст. Это необходимо для того, чтобы найти текущий пункт меню и сделать его активным. Обычно это делается в конструкторе контроллера:
public function __construct()
{
parent::__construct();
[...]
BackendMenu::setContext('October.System', 'system', 'settings');
SettingsManager::setContext('You.Plugin', 'settings');
}
Первый аргумент метода setContext
- author.plugin. Далее идет ключ, который вы указали в методе registerSettings
.
# Файл конфигурации
Плагины могут содержать в себе конфигурационный файл config.php
в подпапке config
. Пример содержимого файла:
<?php
return [
'maxItems' => 10,
'display' => 5
];
Используйте класс Config
для получения доступа к значениям, которые определены в конфигурационном файле. Метод Config::get($name, $default=null)
принимает в качестве первого параметра имя в следующем формате: Acme.Demo::maxItems. Второй параметр определяет значение по умолчанию, которое нужно вернуть, если конфигурационный параметр не существует. Пример:
use Config;
...
$maxItems = Config::get('acme.demo::maxItems', 50);
Настройки плагина могут быть перезаписаны в файле config/ИМЯАВТОРА/НАЗВАНИЕПЛАГИНА/config.php
. Внутри файла Вы можете вернуть только те параметры, которые Вы хотите перезаписать:
<?php
return [
'maxItems' => 20
];
Если Вы хотите использовать различные настройки для разных окружений (dev, production и т.д.), то просто создайте еще один файл в config/ИМЯАВТОРА/НАЗВАНИЕПЛАГИНА/ОКРУЖЕНИЕ/config.php
. Пример:
config/author/plugin/production/config.php:
<?php
return [
'maxItems' => 25
];
Теперь, когда APP_ENV
- production, maxItems
будет равен 25.