mukadi/settings-bundle

此包提供完全可定制的全局应用程序设置表单

安装: 30

依赖项: 0

建议者: 0

安全: 0

星星: 0

观察者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

1.0.0 2018-06-09 11:26 UTC

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