模型设置保留存储在数据库中的值,并可以在后端面板中被用户界面覆盖。
插件可以通过扩展 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 特性,并定义一个$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 = [];
}