mukadi / settings-bundle
此包提供完全可定制的全局应用程序设置表单
1.0.0
2018-06-09 11:26 UTC
Requires
- php: >=5.5
- doctrine/doctrine-bundle: ^1.0
- doctrine/orm: ^2.2
- symfony/form: ~3.4|~4.0
- symfony/framework-bundle: ^3.4||^4.0
Suggests
- symfony/security-csrf: For protecting settings form against CSRF attacks.
- symfony/twig-bridge: For templating with Twig.
- symfony/validator: For the validation of the settings form.
This package is auto-updated.
Last update: 2024-09-10 22:43:22 UTC
README
此包提供完全可定制的全局应用程序设置表单。
您可以在管理页面等位置渲染设置表单。表单构建在包配置下集中进行。
功能
- 设置可以通过Doctrine ORM存储。
- 表单构建集中配置在配置文件中(例如:config.xml或导入的settings.yml文件)
- 一个用于查询存储设置的Service。
安装
如果您想使用symfony flex,请在您的项目中运行以下命令
$ composer config extra.symfony.allow-contrib true
通过运行以下命令使用composer安装包
$ composer require mukadi/settings-bundle
如果您没有使用Symfony Flex,您必须按照以下说明自行配置包。
配置
在内核中启用包
<?php // config/bundles.php return [ // ... Mukadi\SettingsBundle\MukadiSettingsBundle::class => ['all' => true], ];
创建Param类
首先,通过扩展基础Param
类(根据您的存储方式而定)来创建您的Param类。
<?php // src/Entity/Param.php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use Mukadi\SettingsBundle\Entity\Param as Base; /** * Param * * @ORM\Table(name="param") */ class Param extends Base { }
添加包配置文件
配置包以使用此类,并可选地指定应用程序使用的当前Object Manager,如果'manager'键缺失,则默认使用Doctrine实体管理器。
# config/packages/mukadi_settings.yaml mukadi_settings: manager: app.my_custom_manager param_class: App\Entity\Param
现在,包已配置,您需要更新数据库模式,因为您已添加了一个新实体。对于ORM,运行以下命令。
$ php app/console doctrine:schema:update --force
构建表单
以下是一个构建设置表单所需的最小配置示例
# config/packages/mukadi_settings.yaml mukadi_settings: param_class: App\Entity\Param settings: currency: # the setting key type: choice # the form field type options: # options to provide to the field label: Devise choices: '(USD: Dollar US,CDF: Francs Congolais)' # use this notation for setting up the choice list bio: type: textarea options: label: 'About me' age: type: integer options: label: Age post: type: entity options: label: Article choice_label: title class: App\Entity\Post admin: type: email options: label: Admin email date: type: date options: widget: single_text format: yyyy-MM-dd birthday: type: datetime options: days: '[1-10]' # range notation, generate values from 1 to 10 months: '[1-12,2]' # range notation, generate values from 1 to 12, the value 2 is incrementation step years: '(2016,2017)' # array notation public: type: toggle options: label: 'Show posts ?' required: false
当前支持的类型有
- text:简单文本字段,将设置作为纯文本保存到数据库中
- integer:整数输入
- toggle:简单的复选框
- number:数字输入(十进制和小数)
- textarea:多行文本输入
- entity:在数据库中选择一个实体。该包只存储
id
。 - email:电子邮件地址输入
- datetime:日期和时间输入
- date:日期输入
用法
现在您已正确创建设置表单。您可以在自定义SonataAdminBundle
操作页面或其他任何应用程序视图中渲染它:在控制器中使用mukadi_settings.setting
服务获取表单(如果您使用自动装配,则可以使用Mukadi\SettingsBundle\Model\Setting
类)
<?php // src/Controller/AppController.php ... $setting = $this->get('mukadi_settings.setting'); $form = $setting->getForm();
在您的视图中,像渲染任何其他表单一样渲染表单
{# app/Resources/views/default/form.html.twig #} {{ form_start(form) }} {{ form_widget(form) }} <button type="submit">save settings</button> {{ form_end(form) }}
当表单提交时,在控制器中您必须处理该请求,如果您想将更新后的设置存储到数据库中。
<?php // src/Controller/AppController.php ... $setting = $this->get('mukadi_settings.setting'); $form = $setting->getForm(); $form->handleRequest($request); if($form->isSubmitted() && $form->isValid()){ $setting->saveData($form); # store the update in the database }
最后,您可以通过mukadi_settings.setting
服务按如下方式检索存储的数据
<?php // src/Controller/AppController.php ... $setting = $this->get('mukadi_settings.setting'); $currency = $setting->get('currency'); // return 'USD' or 'CDF' $bio = $setting->get('bio'); // return a string $node = $setting->get('post'); // return null or a App\Entity\Post entity as configured