cpoint-eu/settings-bundle

这是一个简单的Bundle,实现了Symfony项目的应用设置Doctrine实体、提供者和工厂。

安装次数: 3,308

依赖关系: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

v2.0.0 2024-07-18 07:49 UTC

This package is auto-updated.

Last update: 2024-09-11 12:27:49 UTC


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'