braunstetter/control-panel-bundle

一组可扩展的模板,用于构建优秀的控制面板,以便构建您的软件系统。

安装: 61

依赖项: 1

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 1

类型:symfony-bundle

v0.2.35 2022-06-25 09:10 UTC

README

Build Status Total Downloads License

有时您不想完全承诺一个完整的后台系统。但您希望有一个美观的后台面板结构,以便进行扩展。

安装

composer require braunstetter/control-panel-bundle
yarn install --force

内部包含

模板

您可以扩展这些模板,也可以使用braunstetter/template-hooks-bundle,其中的钩子用于 base.html.twig 文件内部。

表单类型

此包包含几个自定义表单类型。为了展示您如何使用它,我想给您一个示例

为了使这可行,您需要一个具有标题和描述属性的 OrangePuppy 实体

示例 - 运行一个完整的控制面板

创建一个新的 symfony 项目。

symfony new --full my_project
composer install

设置数据库

对于这个简单的测试,只需将 .env 文件更改为使用 sqlite 数据库

DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7"
#DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8"
###< doctrine/doctrine-bundle ###
symfony console doctrine:database:create

创建带有路由的控制器

symfony console make:controller

 Choose a name for your controller class (e.g. DeliciousElephantController):
 > SiteController

 created: src/Controller/SiteController.php
 created: templates/site/index.html.twig

           
  Success! 
           

编辑 twig 模板

更改 templates/site/index.html.twig

{% extends '@ControlPanel/base.html.twig' %}

{% block title %}Hello SiteController!{% endblock %}

{% block content %}

注意:别忘了将块名称从 body 更改为 content

启动 web 服务器并访问您的控制面板

symfony serve -d

现在您可以通过访问 /site url 来查看结果。

Empty control panel

页面类型示例

<?php

namespace App\Form;

use App\Entity\OrangePuppy;
use Braunstetter\ControlPanel\Form\PageType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class OrangePuppyType extends PageType
{
    public function buildBodyForm(FormInterface $builder, array $options)
    {
        $builder
            ->add('title');
    }

    public function buildSidebarForm(FormInterface $builder, array $options)
    {
        $builder->add('sideBox', TestBoxType::class);
    }

    public function buildToplineRightForm(FormInterface $builder, array $options)
    {
        $builder->add('submit', SubmitType::class, ['attr' => ['class' => 'cp-button-default']]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'title' => 'Create a new OrangePuppy',
            'data_class' => OrangePuppy::class,
        ]);
    }

    public function getParent()
    {
        return PageType::class;
    }
}

以下是解释。

  1. 扩展 Braunstetter\ControlPanel\Form\PageType;(用于额外的构建方法)
  2. 将标题设置为选项(在创建表单时提交选项,或在 configureOptions 方法中设置)
  3. 重写 public function getParent() 以获取视图变量和主题块前缀继承(基本上使样式工作;)
  4. 使用公共 buildBodyFormbuildSidebarFormbuildToplineRightFormbuildToplineLeftForm 方法来填充表单。

结果:page form result

cp-button-default 是此包提供的自定义按钮类

左侧美观的菜单由braunstetter/menu-bundle提供。

BoxType

您可能想知道美观的侧边栏框是从哪里来的。您可能已经注意到了 buildSidebarForm 方法中的 TestBoxType。这是此包提供的第二个自定义 FormType。以下是一个示例

<?php

namespace App\Form;

use Braunstetter\ControlPanel\Form\BoxType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;

class TestBoxType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('description', TextType::class);
    }

    public function getParent(): string
    {
       return BoxType::class;
    }
}

这次您只需重写 getParent() 并返回 Braunstetter\ControlPanel\Form\BoxType。(因为此表单类型没有特殊方法。)

BoxType 默认启用了 symfony 的 inherit_data 选项。这样您就可以像直接在父类中放置表单一样使用它。