cpoint-eu / settings-bundle
这是一个简单的Bundle,实现了Symfony项目的应用设置Doctrine实体、提供者和工厂。
v2.0.0
2024-07-18 07:49 UTC
Requires
- php: ^8.2
- symfony/framework-bundle: ^7.0
- symfony/orm-pack: ^2.4
- symfony/serializer: ^7.0
Requires (Dev)
- symfony/phpunit-bridge: ^6.1
- zoltanka/bypass-readonly: ^0.0.4
README
CreativePointSettingsBundle负责在数据库中管理配置设置,并通过DTO对象在您的Symfony应用程序中提供它们。
安装
请确保全局安装了Composer,如Composer文档中的安装章节所述。
使用Symfony Flex的应用程序
打开命令行,进入您的项目目录,执行以下命令
$ composer require cpoint-eu/settings-bundle
不使用Symfony Flex的应用程序
步骤1:下载Bundle
打开命令行,进入您的项目目录,执行以下命令以下载此Bundle的最新稳定版本
$ composer require cpoint-eu/settings-bundle
步骤2:启用Bundle
然后,通过将其添加到项目config/bundles.php
文件中注册的Bundle列表中来启用Bundle
// config/bundles.php return [ // ... CreativePoint\SettingsBundle\CreativePointSettingsBundle::class => ['all' => true], ];
配置
Bundle配置是可选的,在大多数情况下无需进行任何更改。
creative_point_settings: # [settings_%s] Settings cache key. %s is replaced by the setting name cache_key: 'your_cache_key_%s' # [604800] cache TTL cache_ttl: 400 objects: # [cp_settings] table name in the database table_name: 'your_table_name' # [CreativePoint\SettingsBundle\Entity\Settings] your settings entity model: 'APP\Entity\Settings' # [null] your custom settings entity repository repository: 'APP\Repository\Settings'
使用方法
您必须创建一个实现CreativePoint\SettingsBundle\Model\SettingsDtoInterface
的DTO对象。
//... use CreativePoint\SettingsBundle\Model\SettingsDtoInterface; class MySettingsDto implements SettingsDtoInterface { private const SETTINGS_ID = 'mySettings'; public function __construct( public ?string $someValue = 'default value', public ?int $someNumber = 254, ) { } public static function getSettingsId(): string { return self::SETTINGS_ID; } }
保存设置数据
// ... use CreativePoint\SettingsBundle\Factory\SettingFactoryInterface; // ... // Save settings to the database public function saveSettings(SettingFactoryInterface $factory) { // Set data from array $factory->setSettingsData('mySettings', [ 'someValue' => 'new value', 'someNumber' => 123, ]); // Set data from DTO $dto = new MySettingsDto( 'new value', 123, ); $factory->setSettingsDataFromDto($dto); }
加载设置数据
// ... use CreativePoint\SettingsBundle\Provider\SettingsProvider; // ... // Save settings to the database public function loadSettings(SettingsProviderInterface $provider) { // Load data from DB by DTO::SETTINGS_ID and return DTO $settings = $provider->loadSettingsDto('mySettings'); // ...or load SettingsEntity itself $settings = $provider->getSettingsEntity('mySettings'); // You can also load your DTO from array data $settings = $provider->loadSettingsDtoFromArray('mySettings', [ 'someValue' => 'new value', 'someNumber' => 123, ]); }
覆盖设置实体
如果需要,可以覆盖设置实体。新创建的实体必须扩展基本设置实体CreativePoint\SettingsBundle\Entity\Settings
或实现CreativePoint\SettingsBundle\Entity\SettingsInterface
。然后您需要修改Bundle配置
creative_point_settings: objects: model: 'APP\Entity\YourSettingsEntity'
您可以用相同的方式替换SettingsRepository。您的新存储库必须扩展CreativePoint\SettingsBundle\Repository\SettingsRepository
或实现CreativePoint\SettingsBundle\Repository\SettingsRepositoryInterface
。然后让Bundle了解它
creative_point_settings: objects: repository: 'APP\Repository\YourSettingsRepository'