daycry/settings

CodeIgniter 4 的设置库

v1.0.8 2024-07-05 13:57 UTC

This package is auto-updated.

Last update: 2024-09-25 14:17:21 UTC


README

Donate

CodeIgniter 4 设置

提供数据库存储和检索应用程序设置,如果失败则回退到配置类。

Build Status Downloads GitHub release (latest by date) GitHub stars GitHub license

快速入门

  1. 使用 Composer 安装: > composer require daycry/settings
  2. 创建一个新的迁移并将下面的类复制进去。

Settings 提供了一个简单的接口,您可以使用它来代替调用 config(),以允许您在数据库中读取和存储配置值。如果值尚未更新并保存在数据库中,则将使用配置文件中的原始值。

这允许您将应用程序的默认状态作为配置文件中的值保存,所有这些都在版本控制中,同时仍然允许您的用户在网站上线后覆盖这些设置。

安装

通过 Composer 轻松安装以利用 CodeIgniter 4 的自动加载功能,并始终保持最新状态

  • > composer require daycry/settings

手动安装

下载此存储库,然后通过编辑 app/Config/Autoload.php 并将 Daycry\Settings 命名空间添加到 $psr4 数组中来启用它。例如,如果您将其复制到 app/ThirdParty

$psr4 = [
    'Config'      => APPPATH . 'Config',
    APP_NAMESPACE => APPPATH,
    'App'         => APPPATH,
    'Daycry\Settings' => APPPATH .'ThirdParty/settings/src',
];

设置

运行命令

> php spark settings:publish

此命令将复制一个配置文件到您的应用程序命名空间。然后您可以根据需要调整它。默认文件将位于 app/Config/Settings.php

要存储设置到数据库中,您可以运行提供的迁移

> php spark migrate --all

这将也将迁移所有其他包。如果您不希望这样做,可以将文件从 vendor/daycry/settings/src/Database/Migrations/2021-09-01-000001_CreateSettingsTable.php 复制到 app/Database/Migrations,并带有 --all 标志迁移。

点表示法

这个库使用我们所说的“点表示法”来指定类名和要使用的属性名。它们通过点连接,因此得名。

如果您有一个名为 App 的类,并且您想要使用的属性是 siteName,则键将是 App.siteName

用法

要获取配置值,请使用 settings 服务。

// The same as config('App')->siteName;
$siteName = service('settings')->get('App.siteName');

在这种情况下,我们使用了简短类名 App,这是 config() 方法自动在 app/Config 目录中定位的。如果是来自模块,它会在那里找到。无论如何,完全限定名称将由 Settings 类自动检测,以保持值与可能具有相同名称但不同命名空间的配置文件分开。如果没有找到配置文件匹配,则将使用简短名称,因此可以用来存储没有配置文件的设置。

要保存值,请对设置类调用 set() 方法,提供类名、键和值。请注意,布尔值 true/false 将在数据库中转换为字符串 :true:false,但在检索时将转换回布尔值。数组和对象在保存时序列化,在检索时反序列化。

service('settings')->set('App.siteName', 'My Great Site');

您可以使用 forget() 方法从持久存储中删除值。由于它已从存储中删除,因此它实际上将重置为配置文件中的默认值(如果有)。

service('settings')->forget('App.siteName')

使用助手

该助手提供了使用服务的快捷方式。必须首先使用 helper() 方法加载它或告诉您的 BaseController 总是加载它。

helper('setting');

$name = setting('App.siteName');
// Store a value
setting('App.siteName', 'My Great Site');

// Using the service through the helper
$name = setting()->get('App.siteName');
setting()->set('App.siteName', 'My Great Site');

// Forgetting a value
setting()->forget('App.siteName');

已知限制

以下是该库的已知限制

  1. 使用setting()辅助方法不支持在属性上设置null值。在大多数情况下,您最好忘记该值或将它设置为空字符串。如果您需要,可以通过获取服务并使用set()方法来设置它
service('settings')->set('App.siteName', null);
setting()->set('App.siteName', null);
  1. 您当前一次只能存储一个设置。虽然DatabaseHandler使用本地缓存来保持读取性能尽可能高,但写入必须逐个进行。
  2. 您只能直接访问属性的第一级。在大多数配置类中,这不是一个问题,因为属性是简单值。一些配置文件,如database文件,包含数组属性。