craue / config-bundle
通过服务将数据库存储的设置提供给您的Symfony项目。
Requires
- php: ^7.3|^8
- doctrine/doctrine-bundle: ^1.6.12|^2
- psr/simple-cache: ^1|^2|^3
- symfony/cache: ~4.4|~5.4|^6.3
- symfony/config: ~4.4|~5.4|^6.3
- symfony/dependency-injection: ~4.4|~5.4|^6.3
- symfony/form: ~4.4|~5.4|^6.3
- symfony/framework-bundle: ~4.4|~5.4|^6.3
- symfony/http-foundation: ~4.4|~5.4|^6.3
- symfony/http-kernel: ~4.4|~5.4|^6.3
- symfony/options-resolver: ~4.4|~5.4|^6.3
- symfony/validator: ~4.4|~5.4|^6.3
Requires (Dev)
- craue/translations-tests: ^1.0
- doctrine/orm: ^2.5.14
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.4
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-strict-rules: ^1.1
- phpstan/phpstan-symfony: ^1.1
- phpunit/phpunit: ^9.6
- symfony/asset: ~4.4|~5.4|^6.3
- symfony/browser-kit: ~4.4|~5.4|^6.3
- symfony/phpunit-bridge: ^6.3
- symfony/twig-bundle: ~4.4|~5.4|^6.3
- symfony/web-profiler-bundle: ~4.4|~5.4|^6.3
README
CraueConfigBundle管理存储在数据库中的配置设置,并通过您的Symfony项目中的服务使它们可访问。这些设置类似于在parameters.yml
中定义的设置,但可以在运行时修改,例如由管理员用户修改。
安装
获取包
通过在shell中运行以下命令让Composer下载和安装包:
composer require craue/config-bundle
。
启用包
如果您不使用Symfony Flex,请手动注册包
// in config/bundles.php return [ // ... Craue\ConfigBundle\CraueConfigBundle::class => ['all' => true], ];
创建表
最好通过调用
# in a shell
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
或
# in a shell
php bin/console doctrine:schema:update
或您喜欢的方式。
添加管理设置的路线(可选)
您可以选择导入默认的路由配置
# in app/config/routing.yml craue_config_settings: resource: "@CraueConfigBundle/Resources/config/routing/settings.xml" prefix: /settings
...或者添加自己的配置以完全控制URL模式。
# in app/config/routing.yml craue_config_settings_modify: path: /settings/modify defaults: _controller: Craue\ConfigBundle\Controller\SettingsController::modifyAction
需要一些CSS来正确渲染表单。将资源安装到您的项目中
# in a shell
php bin/console assets:install --symlink web
用法
定义设置
此包不提供创建新设置的功能,因为这没有意义。这些设置将在您的应用程序中使用,因此需要编写代码。这意味着您必须自己创建数据库表craue_config_setting
中的新设置,例如使用迁移。
管理设置值
如果您添加了上述路线,您可以简单表单中管理所有定义的设置的值。默认情况下,您可以通过访问/settings/modify
来访问该表单。但您可能希望在安全配置中限制对此表单的访问。
读取和写入设置
为了访问设置,该包提供了服务Craue\ConfigBundle\Util\Config
。要直接在控制器中使用它,请向操作添加一个自动注入的类型提示参数...
// in src/Controller/MyController.php use Craue\ConfigBundle\Util\Config; public function indexAction(Config $config) { // use $config }
...或者让您的控制器扩展Symfony\Bundle\FrameworkBundle\Controller\AbstractController
,并通过定义getSubscribedServices
使服务别名craue_config
可用
// in src/Controller/MyController.php use Craue\ConfigBundle\Util\Config; public function indexAction() { // use $this->get('craue_config') } public static function getSubscribedServices() { return array_merge(parent::getSubscribedServices(), [ 'craue_config' => Config::class, ]); }
该服务定义了以下方法
all()
- 获取所有定义的设置及其值的关联数组get($name)
- 获取指定设置的值getBySection($section)
- 与all()
类似,但只获取指定部分(或显式传递null
时没有部分的设置)的设置set($name, $value)
- 设置指定设置的值setMultiple([$name1 => $value1, $name2 => $value2])
- 同时设置多个设置的值
请注意,每个设置都必须存在,否则将抛出异常。
在Twig模板中使用
此包中的Twig扩展支持直接在模板中读取设置。
{{ craue_setting('name-of-a-setting') }}
启用缓存(可选)
为了减少数据库查询次数,您可以设置设置的缓存。首先,您必须选择您想使用的缓存实现。目前,有适配器可用
有关详细信息,请参阅每个实现的文档,并继续阅读下面的相应部分。完成后,CraueConfigBundle
将自动缓存设置(使用内置的craue_config_cache_adapter
服务)。
请注意,在修改应用程序之外修改设置后(例如,通过Doctrine迁移)清除缓存(如果需要)
# in a shell
php bin/console doctrine:cache:clear craue_config_cache
缓存实现:DoctrineCacheBundle
适当设置参数 craue_config.cache_adapter.class
并配置一个名为 craue_config_cache_provider
的缓存提供者。
# in app/config/config.yml parameters: craue_config.cache_adapter.class: Craue\ConfigBundle\CacheAdapter\DoctrineCacheBundleAdapter doctrine_cache: providers: craue_config_cache: apc: ~ namespace: craue_config aliases: - craue_config_cache_provider
缓存实现:Symfony 缓存组件
适当设置参数 craue_config.cache_adapter.class
并配置一个名为 craue_config_cache_provider
的缓存池。
# in app/config/config.yml parameters: craue_config.cache_adapter.class: Craue\ConfigBundle\CacheAdapter\SymfonyCacheComponentAdapter services: craue_config_cache_provider: class: Symfony\Component\Cache\Adapter\FilesystemAdapter public: false arguments: - 'craue_config' - 0 - '%kernel.cache_dir%'
自定义
在提交内置表单后重定向到不同的页面
如果您已启用内置表单,可以通过设置目标路由名称来定义成功保存更改后重定向的位置。
# in app/config/parameters.yml parameters: craue_config.redirectRouteAfterModify: craue_config_settings_modify
在部分中渲染设置
如果您想在组(此处称为部分)中渲染设置,您必须将这些设置分配一个共同的名称(在数据库中)。可选地,您可以影响这些部分的顺序。
# in app/config/parameters.yml parameters: craue_config.configTemplate.sectionOrder: [section1, section2, section3]
没有部分的设置将首先渲染。没有明确排序的部分将最后渲染。
翻译
您可以通过将它们添加到具有 CraueConfigBundle
域的翻译文件中为在表单中显示的所有设置(和部分)添加翻译。
# in app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml name-of-a-setting: name of the setting # in app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml name-of-a-setting: Name der Einstellung
使用自定义实体进行设置
自定义实体必须提供对字段 value
的映射。类 BaseSetting
定义了此字段,但没有为其定义映射。这允许轻松覆盖,包括数据类型。在以下示例中,value
字段将被映射到一个 text
列,这反过来又将以 textarea
的形式渲染内置表单字段。
因此,创建实体及其适当的映射
// src/MyCompany/MyBundle/Entity/MySetting.php use Craue\ConfigBundle\Entity\BaseSetting; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="Craue\ConfigBundle\Repository\SettingRepository") * @ORM\Table(name="my_setting") */ class MySetting extends BaseSetting { /** * @var string|null * @ORM\Column(name="value", type="text", nullable=true) */ protected $value; /** * @var string|null * @ORM\Column(name="comment", type="string", nullable=true) */ protected $comment; public function setComment($comment) { $this->comment = $comment; } public function getComment() { return $this->comment; } }
并使包了解它
# in app/config/config.yml craue_config: entity_name: MyCompany\MyBundle\Entity\MySetting