插件设置和配置
Introduction
有两种配置插件的方法——使用后端设置表单和使用配置文件。将数据库设置与后端页面一起使用可提供更好的用户体验,但它们会为初始开发带来更多开销。基于文件的配置适用于很少修改的配置。
数据库设置
您可以创建用于在数据库中存储设置的模型,方法是实现SettingsModel
模型类中的行为。该模型可直接用于创建后端设置表单。您不需要创建数据库表和控制器来创建基于设置模型的后端设置表单。
设置模型类应该扩展模型类并实现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';
// Optional - sets the TTL for the settings cache
public $settingsCacheTtl = 3600;
}
这$settingsCode
设置模型需要属性。它定义了用于将设置保存到数据库的唯一设置键。
这$settingsFields
如果要基于模型构建后端设置表单,则需要该属性。该属性指定包含表单字段定义的 YAML 文件的名称。表单字段在后端表单 文章。 YAML 文件应放置在名称与小写模型类名称匹配的目录中。对于前面示例中的模型,目录结构如下所示:
📂 plugins
┗ 📂 acme
┗ 📂 demo
┗ 📂 models
┣ 📂 settings <=== Model files directory
┃ ┗ 📜 fields.yaml <=== Model form fields
┗ 📜 Settings.php <=== Model script
您可以选择添加一个$settingsCacheTtl
如果您希望更改您的设置将保持缓存的时间长度,请将属性添加到您的设置模型。默认情况下,设置模型中的设置将保留缓存长达 24 分钟。要禁用缓存,您可以将其设置为0
或者false
.
设置模型可以注册 出现在后端设置页面,但这不是必需的 - 您可以像任何其他模型一样设置和读取设置值。
写入设置模型
设置模型具有静态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);
初始化默认值
为了提供设置的默认值,只需实现initSettingsData()
方法;这将在实例化设置模型实例时调用。当数据库中没有设置值时,将使用这些默认值。请参阅下面的示例实现:
class Settings extends Model
{
public function initSettingsData()
{
$this->files_per_post = 5;
$this->file_extensions = 'jpg, jpeg, png, gif, webp';
}
}
后端设置页面
后端包含用于住房设置和配置的专用区域,可以通过单击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'
]
];
}
NOTE: 后端设置页面应该设置设置上下文 以便在系统页面侧边栏中标记相应的设置菜单项处于活动状态。自动检测设置模型的设置上下文。
以下示例创建指向设置模型的链接。设置模型是设置 API 的一部分,在上面的数据库设置 部分。
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
参数由设置搜索功能使用。如果未提供关键字,则搜索仅使用设置项标签和描述。
设置页面导航上下文
就像在控制器中设置导航上下文,后端设置页面应该设置设置导航上下文。为了将系统页面侧边栏中的当前设置链接标记为活动,这是必需的。使用System\Classes\SettingsManager
类来设置设置上下文。通常它可以在控制器构造函数中完成:
public function __construct()
{
parent::__construct();
[...]
BackendMenu::setContext('Winter.System', 'system', 'settings');
SettingsManager::setContext('You.Plugin', 'settings');
}
的第一个参数setContext
方法是以下格式的设置项所有者:author.plugin.第二个参数是设置名称,与您提供的相同注册后端设置页面.
基于文件的配置
插件可以有一个配置文件config.php
在里面config
插件目录的子目录。配置文件是 PHP 脚本,定义并返回一个array.示例配置文件plugins/acme/demo/config/config.php
:
<?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/author/plugin/config.php
, 例如config/acme/todo/config.php
, 或者config/acme/todo/dev/config.php
对于特定于环境的覆盖(在这种情况下dev
).
NOTE: 为了使配置覆盖起作用,插件必须包含默认配置文件(即
plugins/author/plugin/config/config.php
.即使您希望所有配置都来自项目覆盖而不是默认配置文件,它仍然是highly 建议提供默认配置文件作为文档形式,说明哪些配置选项可用于在项目级别进行修改。
在覆盖的配置文件中,您可以只返回要覆盖的值:
<?php
return [
'maxItems' => 20
];
如果你想在不同的环境中使用单独的配置(例如:dev,production), 只需创建另一个文件config/author/plugin/environment/config.php
.代替environment 与环境名称。这将与合并config/author/plugin/config.php
.
Example:
config/author/plugin/production/config.php:
<?php
return [
'maxItems' => 25
];
这将设置maxItems
到 25 时APP_ENV
被设定为production.