aecodes/admin-panel

一个简单且与框架无关的管理面板

dev-master 2020-11-21 16:38 UTC

This package is auto-updated.

Last update: 2024-09-22 01:01:13 UTC


README

框架无关的管理面板。

目标

尽量使其尽可能简洁。它允许您创建具有不同类型(表格、表单)的多个页面,而不会过多干预您的代码库。

ps:您仍然需要设置您的路由、身份验证等...

响应

我们允许多种类型的响应,默认情况下我们使用 PHP 视图,但考虑到 Laravel 用户为例,我们会使用 blade,因此一个可能的解决方案是创建一个不同的 Renderer

目前我们有两种默认的 Renderer

  • DefaultRenderer 这仅返回一个数组作为输出
  • JsonRenderer 这返回 JSON 输出

要创建一个 Renderer,让它扩展 Aecodes\AdminPanel\Responses\Renderer,然后将它添加到配置中。

目前支持的布局

  • 表格(接受 TD 数组,每个 TD 都可以自定义渲染)
  • 表单(接受字段数组)
  • Div(唯一的用例是自定义包装器)
  • 您可以创建自己的小部件。

ps:小部件实现 Widget 接口。

目前支持的表单字段

  • 输入(文本、密码、电子邮件、数字等)
  • 单选按钮
  • 下拉列表
  • 文本区域
  • 复选框
  • 图片(上传单个图片)

如何设置

  1. 使用 Composer 安装
  2. 使用 config/panel.php 作为起点创建一个配置文件。
  3. 创建(单例)Dashboard 类的实例,确保将配置作为数组传递。
$config = require './config/panel.php';
Aecodes\AdminPanel\Dashboard::setup($config);

如何创建管理页面

  1. 创建一个新的类,扩展 Panel
  2. 为了方便,设置面板的 $name$description 属性(显示在页面上)。
  3. 创建一个返回数据数组的 query 方法。
function query(): array {
    // get data from database.
    return Page::all()->toArray();
}
  1. 创建一个返回小部件数组的 render 方法。
  • 要创建表格
function render(): array {
    return [
        Table::make([
            // (label, name) both are optional
            TD::make('#', 'id'),
            // it's also possible to use Table::column
            Table::column('Title', 'title'),
        ])
        // ...
    ];
}
  • 要创建表单
function render(): array {
    return [
        Form::make([
            Input::make('title')->title('Title'),

            // form submit
            Action::button('Save'),
        ])
        ->action('#')
        ->method('post'),
        // ...
    ];
}
  1. 最后,在路由的回调中,只需返回您创建的类的实例即可。
// callback for some route
public function index() {
    // PagesTable extends Panel
    return (new Response(new PagesTable))->render();
}

可扩展性

布局

在扩展 Panel 类时,您可以指定 $layout 属性。

视图

该软件不包含视图层。您可以使用默认的(很快)视图包。

配置

默认配置是

return [
    // current renderer.
	'renderer' => 'default',

    // add new renderer here.
	'renderers' => [
		'json'    => Aecodes\AdminPanel\Responses\JsonRenderer::class,
		'default' => Aecodes\AdminPanel\Responses\DefaultRenderer::class,
	],

    // default classes for button and a tag.
	'classes' => [
		'link'   => '',
		'button' => '',
	],

    // global menus, can be and array or callback
	'menu' => function () {
		return [];
	},

    // input old value.
	'old_value' => function ($name, $default) {
		return $default;
	},

    // global errors (i.e: validation errors)
	'errors' => function () {
		return [];
	}

];