vmorozov/laravel_admin_generator

本包旨在加快您Laravel项目的管理面板开发

v1.5.5 2021-11-17 09:34 UTC

README

Build Status

本包旨在加快Laravel项目的管理面板开发。
它帮助您处理项目开发中的常见管理面板任务。

preview

功能

  1. 快速CRUD生成
  2. 处理不同字段类型
  3. 处理关系
  4. 搜索
  5. 导出数据到xls, csv文件
  6. 使用默认的Order By和Where条件
  7. 可以为每个列表项添加额外的按钮
  8. 上传文件到模型列
  9. 使用spatie/laravel-medialibrary包上传文件

1. 安装

  1. composer require vmorozov/laravel_admin_generator
  2. php artisan vendor:publish并选择Vmorozov\LaravelAdminGenerator\AdminGeneratorServiceProvider以发布所有管理面板所需的文件。

2. 设置

1. 创建控制器

<?php

namespace App\Http\Controllers\Admin;

use App\Product;
use Vmorozov\LaravelAdminGenerator\App\Controllers\CrudController;

class ProductsController extends CrudController
{
    protected $model = Product::class;
    protected $url = 'products';
    protected $titlePlural = 'Товары';
    protected $titleSingular = 'Товар';    
}

2. 将记录添加到routes/admin.php

...

AdminRoute::resource(\App\Http\Controllers\Admin\ProductsController::class);

3. (可选)设置字段

可用字段类型

  • text - 用于简单输入type="text"
  • textarea - 用于简单textarea
  • number - 用于input type="number"
  • email - 用于input type="email"
  • date - 用于input type="date"
  • datetime - 用于input type="datetime"
  • file - 用于input type="file"
  • select - 通过select实现一对一关系
  • select_multiple - 通过select multiple实现多对多关系

在模型中

public $adminFields = [

        'name' => [
            'label' => 'Name',
            'displayInForm' => true,
            'display_in_list' => true,
            'searchable' => true,
            'min' => 2,
            'max' => 50,

        ],
        'description' => [
            'label' => 'Description',
            'displayInForm' => true,
            'display_in_list' => true,
            'searchable' => false,
            'min' => 2,
            'max' => 5000,

        ],
        'price' => [
            'label' => 'Price',
            'display_in_create_form' => true,
            'display_in_update_form' => true,
            'display_in_list' => true,
            'field_type' => 'number',
            'min' => 0,
            'max' => 100000,
        ],
        'user_id' => [
            'label' => 'User Id',
            'display_in_create_form' => true,
                        'display_in_update_form' => true,
            'display_in_list' => true,
            'min' => 0,

            'field_type' => 'select',
            'relation' => 'user',
            'relation_model' => User::class,
            'relation_display_attribute' => 'name',
        ],
        'users' => [
            'label' => 'Users Many To Many',
            'display_in_create_form' => true,
            'display_in_update_form' => true,
            'min' => 0,

            'field_type' => 'select_multiple',
            'relation' => 'users',
            'relation_model' => User::class,
            'relation_display_attribute' => 'name',
        ],
        
        'updated_at' => [
            'display_in_create_form' => true,
            'display_in_update_form' => true,
            'display_in_list' => false,
        
            'field_type' => 'date_time',
        ]
    ];

在控制器中

<?php

namespace App\Http\Controllers\Admin;

use App\Product;
use Vmorozov\LaravelAdminGenerator\App\Controllers\CrudController;

class ProductsController extends CrudController
{
    protected $model = Product::class;
    protected $url = 'products';
    protected $titlePlural = 'Товары';
    protected $titleSingular = 'Товар';
    protected $columnParams = [
        'name' => [
                    'label' => 'Name',
                    'display_in_create_form' => true,
                    'display_in_update_form' => true,
                    'display_in_list' => true,
                    'searchable' => true,
                    'min' => 2,
                    'max' => 50,
        
                ],
                'description' => [
                    'label' => 'Description',
                    'display_in_create_form' => true,
                    'display_in_update_form' => true,
                    'display_in_list' => true,
                    'searchable' => false,
                    'min' => 2,
                    'max' => 5000,
        
                ],
    ];
}

3. 添加侧边栏链接

打开文件resources/views/vendor/vmorozov/laravel_admin_generator/layouts/sidebar.blade.php,并将链接添加到生成的管理面板端点。

3. 高级使用

将默认的Order By和Where子句添加到列表查询中

protected function setup()
{
    $this->addDefaultWhereClause('password', '!=', null);
    $this->addDefaultOrderByClause('id', 'desc');
}

为列表中的每个项目添加额外的按钮

protected function setup()
{
    // without putting entity id to the url
    $this->addListItemButton(url('/test_button'), 'test button');
    
    // with putting entity id to the url
    $this->addListItemButton(url('/test_button/{id}'), '<i class="fa fa-check" aria-hidden="true"></i> test button', 'btn btn-success', ['target' => '_blank']);

}

搜索

要添加搜索功能,只需将可搜索参数添加到字段设置中即可

public $adminFields = [
        'name' => [
            'searchable' => true,
        ],
    ];

与spatie/laravel-medialibrary一起工作

要在管理面板中使用此包,请安装包
然后您应该为模型添加额外的设置

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
use Spatie\MediaLibrary\HasMedia\Interfaces\HasMedia;
use Vmorozov\LaravelAdminGenerator\App\Utils\ModelTraits\AdminPanelTrait;

class Product extends Model implements HasMedia
{
    use AdminPanelTrait;
    use HasMediaTrait;

    public $mediaCollections = [
        'main_image' => [
            'name' => 'Main image',
            'single_file' => true
        ],
        'gallery' => [
            'name' => 'Gallery'
        ],
    ];
    
//  Some other code here     
}    
有这两种类型的可用集合设置
  1. 简单集合用于多个文件
  2. 集合用于单个文件(如用户的头像图像、产品的主图像等)。要使集合为单个,请使用'single_file' => true参数。