vivait / settings-bundle
设置包
Requires
- symfony/form: ~2.4
- symfony/yaml: ~2.4
Requires (Dev)
- doctrine/orm: ^2.5
- monolog/monolog: ^1.19
- phpspec/phpspec: ~2.0
- phpunit/phpunit: ~4.3
Suggests
- doctrine/doctrine-bundle: ~1.2
This package is auto-updated.
Last update: 2021-06-14 12:53:56 UTC
README
该包的目的是允许您检索并将动态设置传递给在Symfony中使用的服务和其它类。这些设置目前可以存储在Doctrine、Redis或Symfony的配置中。可以为每个设置和服务指定单个或多个驱动程序,它将搜索每个驱动程序,直到找到设置。
提供了一个控制器,可以轻松地让您的用户通过UI配置设置——尽管我们建议您根据自己的应用程序进行自定义。
安装
使用Composer
$ composer require vivait/settings-bundle
启用包
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Vivait\SettingsBundle\VivaitSettingsBundle() ); }
添加路由规则(可选)
# app/config/routing.yml vivait_settings: resource: "@VivaitSettingsBundle/Resources/config/routing.yml" prefix: /settings
使用方法
通过驱动程序访问设置。该包附带了一些驱动程序以供您开始,但您必须在您的config.yml
文件中定义它们。
vivait_settings: drivers: yaml: vivait_settings.driver.yaml doctrine: vivait_settings.driver.doctrine
检索设置的最简单方法是通过直接使用vivait_settings.registry
类。这将检查所有可用的驱动程序,直到找到设置。
$this->get('vivait_settings.registry')->get('settingname');
您还可以通过驱动程序集合检查设置。驱动程序集合只是一个驱动程序的堆栈,可以通过vivait_settings.registry
类创建。
$this->get('vivait_settings.registry')->drivers(['doctrine', 'yaml'])->get('settingname');
在上面的示例中,设置注册表将尝试驱动程序集合中引用的每个驱动程序,直到找到适当的设置。
您还可以为在任一驱动程序中找不到设置值的情况指定一个默认值。
$this->get('vivait_settings.registry')->get('settingname', 'default value');
### 直接将设置传递给服务 最可能的情况是,您希望将设置直接传递到您服务配置文件中的服务。您可以通过表达式完成此操作。
services: my_service: class: "Me\MyBundle\Services\MyService" arguments: [ "@=service('vivait_settings.registry').get('myservice.settingname')" ]
您仍然可以在表达式中指定驱动程序。
services: my_service: class: "Me\MyBundle\Services\MyService" arguments: [ "@=service('vivait_settings.registry').drivers(['yaml', 'doctrine']).get('myservice.settingname')" ]
在上面的示例中,我们如何使用“.”对设置进行分类。原因将在我们创建设置表单时变得明显,但组是可选的,并且可以嵌套。
添加自定义驱动程序
添加自定义驱动程序非常简单,并且被鼓励。例如,作为我们Auth Bundle的一部分,我们允许每个用户的设置。这是通过自定义驱动程序提供的。
所有驱动程序都必须实现\Vivait\SettingsBundle\Driver\ParametersStorageInterface
接口。要注册驱动程序,请将其添加到服务容器中。
me.mybundle.mydriver: class: Me\MyBundle\Driver\MyDriver
接下来,将服务ID添加到您的config.yml
文件中,如上所述。
使用表单更改设置
创建一个表单类型,并注入所需的驱动程序。
me.mybundle.form.type.settings_signtaure: class: Me\MyBundle\Form\Type\SignatureType arguments: [@vivait_settings.driver.doctrine] tags: - { name: form.type, alias: 'signature' }
在表单类型中,添加您希望修改的设置键,以及SettingsSubscriber
和KeyToArrayTransformer
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add( 'signature', //setting key 'textarea' ) ->add('Submit', 'submit'); $builder->addEventSubscriber(new SettingsSubscriber($this->driver)); $builder->addModelTransformer(new KeyToArrayTransformer()); }
像平常一样处理表单,但使用您选择的驱动程序设置数据
public function signatureAction(Request $request) { $form = $this->createForm('signature'); $form->handleRequest($request); if($form->isValid()){ $driver = $this->get('vivait_settings.driver.doctrine'); foreach($form->getData() as $key => $value){ $driver->set($key, $value); } }
测试运行
单元测试是用PHPSpec编写的。