vmorozov / laravel_admin_generator
本包旨在加快您Laravel项目的管理面板开发
v1.5.5
2021-11-17 09:34 UTC
Requires
- php: >=7.2
- almasaeed2010/adminlte: 2.4.*
- illuminate/database: >=5.3
- illuminate/http: >=5.3
- illuminate/routing: >=5.3
- illuminate/support: >=5.3
- maatwebsite/excel: ^3.1
- spatie/laravel-medialibrary: >=7.1
- vmorozov/laravel-file-uploads: ^1.1
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: 3.*
- phpunit/phpunit: ^8.0
README
本包旨在加快Laravel项目的管理面板开发。
它帮助您处理项目开发中的常见管理面板任务。
功能
- 快速CRUD生成
- 处理不同字段类型
- 处理关系
- 搜索
- 导出数据到xls, csv文件
- 使用默认的Order By和Where条件
- 可以为每个列表项添加额外的按钮
- 上传文件到模型列
- 使用spatie/laravel-medialibrary包上传文件
1. 安装
composer require vmorozov/laravel_admin_generator
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 }
有这两种类型的可用集合设置
- 简单集合用于多个文件
- 集合用于单个文件(如用户的头像图像、产品的主图像等)。要使集合为单个,请使用
'single_file' => true
参数。