daycry / settings
CodeIgniter 4 的设置库
Requires
- php: ^7.3 || ^8.0
Requires (Dev)
- codeigniter4/devkit: ^1.0
- codeigniter4/framework: ^4
- rector/rector: 0.15.24
README
CodeIgniter 4 设置
提供数据库存储和检索应用程序设置,如果失败则回退到配置类。
快速入门
- 使用 Composer 安装:
> composer require daycry/settings
- 创建一个新的迁移并将下面的类复制进去。
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');
已知限制
以下是该库的已知限制
- 使用
setting()
辅助方法不支持在属性上设置null
值。在大多数情况下,您最好忘记该值或将它设置为空字符串。如果您需要,可以通过获取服务并使用set()
方法来设置它
service('settings')->set('App.siteName', null); setting()->set('App.siteName', null);
- 您当前一次只能存储一个设置。虽然
DatabaseHandler
使用本地缓存来保持读取性能尽可能高,但写入必须逐个进行。 - 您只能直接访问属性的第一级。在大多数配置类中,这不是一个问题,因为属性是简单值。一些配置文件,如
database
文件,包含数组属性。