模型设置保留存储在数据库中的值,并可在后端面板中通过用户界面进行覆盖。
插件可以通过扩展 System\Models\SettingModel 基类,使用模型将设置存储在数据库中,从而实现数据库驱动的配置。此模型可以直接用于创建后端设置表单。您无需为基于设置模型创建后端设置表单而创建数据库表和控制器。模型设置目录结构的示例:
├── plugins
| └── acme
| └── demo
| ├── models
| | ├── usersetting ← 配置目录
| | | └── fields.yaml ← 表单字段
| | └── UserSetting.php ← 模型类
| └── Plugin.php
设置模型可以注册以显示在后端面板的设置区域,但这并非强制要求 - 你可以像其他任何模型一样设置和读取设置值。
配置模型类应该继承 System\Models\SettingModel 类,与任何其他模型一样,应该定义于插件目录的 models 子目录。下一个示例中的模型应该定义于 plugins/acme/demo/models/UserSetting.php 文件。
namespace Acme\Demo\Models;
class UserSetting extends \System\Models\SettingModel
{
public $settingsCode = 'acme_demo_settings';
public $settingsFields = 'fields.yaml';
}$settingsCode 属性是设置模型所必需的。它定义了用于将设置保存到数据库中的唯一设置键。
$settingsFields 属性是必需的,如果你要基于模型构建后端设置表单。该属性指定了包含表单字段定义的 YAML 文件的名称。表单字段在 表单控制器文章 中有描述。该 YAML 文件应该放置到与模型类名(小写)匹配的目录中。
设置模型具有静态 set 方法,允许保存单个或多个值。您还可以使用标准的模型特性来设置模型属性并保存模型。
use Acme\Demo\Models\UserSetting;
// Set a single value
UserSetting::set('api_key', 'ABCD');
// Set an array of values
UserSetting::set(['api_key' => 'ABCD']);
// Set object values
$settings = UserSetting::instance();
$settings->api_key = 'ABCD';
$settings->save();设置模型具有静态 get 方法,使您能够加载单个属性。此外,当您使用 instance 方法实例化模型时,它会从数据库加载属性,并且您可以直接访问它们。
// Outputs: ABCD
echo UserSetting::instance()->api_key;
// Get a single value
echo UserSetting::get('api_key');
// Get a value and return a default value if it doesn't exist
echo UserSetting::get('is_activated', true);设置模型可以为每个由多站点配置定义的站点提供不同的配置值。要启用多站点,请在模型内部包含October\Rain\Database\Traits\Multisite Trait并定义一个$propagatable属性,该属性可以指定在所有站点之间传播的字段。
namespace Acme\Demo\Models;
class UserSetting extends \System\Models\SettingModel
{
use \October\Rain\Database\Traits\Multisite;
public $settingsCode = 'acme_demo_settings';
public $settingsFields = 'fields.yaml';
protected $propagatable = [];
}