sentence/config-bundle

通过服务在您的 Symfony 项目中提供数据库存储的设置。

安装: 45

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 35

类型:symfony-bundle

2.1.0 2018-03-09 14:52 UTC

This package is not auto-updated.

Last update: 2024-09-22 10:53:01 UTC


README

Build Status Coverage Status

CraueConfigBundle 管理存储在数据库中的配置设置,并通过您的 Symfony 项目中的服务使它们可访问。这些设置类似于在 parameters.yml 中定义的设置,但可以在运行时修改,例如,由管理员用户修改。

安装

获取包

在终端运行以下命令,让 Composer 下载并安装包:

php composer.phar require craue/config-bundle:~2.1

在终端。

启用包

// in app/AppKernel.php
public function registerBundles() {
	$bundles = array(
		// ...
		new Craue\ConfigBundle\CraueConfigBundle(),
	);
	// ...
}

创建表

您可以通过调用

# in a shell (run `bin/console` instead of `app/console` if your project is based on Symfony 3)
php app/console doctrine:migrations:diff
php app/console doctrine:migrations:migrate

# in a shell (run `bin/console` instead of `app/console` if your project is based on Symfony 3)
php app/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: CraueConfigBundle:Settings:modify

使用方法

定义设置

此包不提供创建新设置的函数,因为在运行时这样做没有意义。这些设置将在您的应用程序中使用,因此需要编写相应的代码。这意味着您必须自己创建数据库表 craue_config_setting 中的新设置,例如使用迁移。

管理设置的值

如果您添加了上述路线,则可以通过简单的表单管理所有定义的设置的值。默认情况下,您可以通过浏览到 app_dev.php/settings/modify 访问该表单。但您可能希望在安全配置中限制对表的访问。

读取设置

此包提供了一个名为 craue_config 的服务。在控制器中,您可以调用

$this->get('craue_config')->get('name-of-a-setting')

以检索 name-of-a-setting 设置的值。此外,您可以调用

$this->get('craue_config')->all()

以获取所有定义的设置及其值的关联数组。

$this->get('craue_config')->getBySection('name-of-a-section')

将仅获取指定部分(或明确传递 null 作为名称的无部分设置)的设置。

写入设置

使用同一服务可以设置设置的新的值

$this->get('craue_config')->set('name-of-a-setting', 'new value');
$this->get('craue_config')->setMultiple(array('setting-1' => 'foo', 'setting-2' => 'bar'));

请注意,设置必须存在,否则会抛出异常。

在 Twig 模板中使用

此包中的 Twig 扩展支持在模板中直接读取设置。

{{ craue_setting('name-of-a-setting') }}

启用缓存(可选)

为了减少数据库查询次数,您可以为设置设置缓存。首先,您必须选择您想使用的缓存实现。目前,有适配器可用于

有关详细信息,请参阅每个实现的文档,并在下面的相应部分中继续阅读。完成后,CraueConfigBundle 将自动缓存设置(使用内置的 craue_config_cache_adapter 服务)。

请注意,在修改应用程序外部的设置(例如,通过 Doctrine 迁移)后,需要清除缓存(如果需要)

# in a shell (run `bin/console` instead of `app/console` if your project is based on Symfony 3)
php app/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