laravel-admin / crud
Laravel Admin 的 Crud 包
Requires
- php: ^8.2
- laravel/framework: ^11.0
- dev-master
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.3.0
- v1.2.0
- v1.0.1
- v1.0.0
- v0.6.5
- v0.6.4
- v0.6.3
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.0
- v0.4.0
- v0.3.2
- v0.3.1
- v0.3.0
- 0.2.2
- v0.2.1
- v0.2.0
- 0.1.14
- 0.1.13
- 0.1.12
- 0.1.11
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-hotfix/2.0.9
- dev-develop
- dev-feature/show-view
- dev-feature/php80
- dev-feature/splitPageTranslationLayout
This package is not auto-updated.
Last update: 2024-09-18 16:42:50 UTC
README
此包为实验性质,请勿在生产环境中使用。
安装
从 Packagist 安装
composer require laravel-admin/crud
将服务提供者添加到你的 app.php 配置文件
LaravelAdmin\Crud\CrudServiceProvider::class,
使用
首先为你的模块创建迁移、模型和后台控制器。将后台控制器添加为路由资源,例如
Route::resource('blog', 'BlogController');
资源控制器
按照以下方式设置你的基本控制器以使用 crud 方法
<?php
namespace App\Http\Controllers;
use LaravelAdmin\Crud\Controllers\ResourceController;
use App\Blog;
class BlogController extends ResourceController
{
protected $model = Blog::class;
protected $singular_name = "blog";
protected $plural_name = "blogs";
}
ResourceController 包含 Laravel 资源控制器所有 crud 方法,如 index、create、store、edit、update 和 destroy。目前只有 show 方法不会使用。
index、create 和 edit 将由默认的 bootstrap 模板渲染,与 artisan make:auth 生成的视图兼容。
你需要做的只是定义你的字段和验证。因此,你可以在自己的控制器中覆盖父控制器的几个方法。
store 上的验证
protected function getValidationRulesOnStore()
{
return [
'title' => 'required|string|min:6',
'body' => 'required|string',
];
}
定义创建表单的字段
protected function getFieldsForCreate()
{
return [
[
'id' => 'title',
'label' => 'Title',
'description' => 'This is the main title of the page',
'field' => 'text',
],
[
'id' => 'body',
'label' => 'Body',
'field' => 'textarea',
]
];
}
处理 store 上的有效载荷
此方法为可选,默认情况下,有效载荷将是 getFieldsForCreate 方法中定义的字段。如果你想修改数据,如密码或日期格式,可以实现此方法。
protected function getPayloadOnStore(array $data)
{
$payload = $this->getPayloadForStoreDefault($data);
// If password is given, lets encrypt it, otherwise remove the password from the payload
if (!empty($payload['password'])) $payload['password'] = bcrypt($payload['password']);
else unset($payload['password']);
return $payload
}
编辑模型
对于编辑模型,store 中可用的方法相同
- getValidationRulesOnUpdate
- getFieldsForEdit
- getPayloadOnUpdate
注意:如果你的设置对 store 和 update 相同,你只需要定义更新方法的方法。
查看记录
对于生成索引视图,你可以使用 getFieldsForList 方法定义你的字段。
protected function getFieldsForList()
{
return [
[
'id' => 'title',
'label' => 'Title',
],
[
'id' => 'created_at',
'label' => 'Created',
'formatter' => function($model)
{
return $model->created_at->format('Y-m-d');
}
]
];
}
注意:每个字段都有一个可选的格式化器属性。默认情况下,显示在 id 中定义的模型属性。你可以在格式字段中指定访问器作为字符串,或如上所示作为回调。
更多功能即将到来....
布局模块
此包包括用于你页面的布局构建器。
安装
将布局配置文件添加到你的本地配置文件夹。
php artisan vendor:publish --provider="LaravelAdmin\Crud\CrudServiceProvider::class"
将 Layout vue 组件添加到你的视图实例
import layout from '../../../vendor/laravel-admin/crud/resources/js/components/layout/Layout.vue';
Vue.component('layout', layout);
构建你的组件
在配置文件中,你可以构建自己的组件。默认情况下,配置中包含一个简单的组件。
每个组件都是字段的组合。字段类型包括
- 文本字段 (layout-text)
- 文本区域 (layout-textarea)
- 布尔值 (layout-boolean)
- 选择框 (layout-select)
- 富文本 (layout-wysiwyg) (TinyMCE)
- 媒体项 (layout-media-item) (仅在 LaravelAdmin/MediaManager 可用时)
注意:选择框字段可以有一个选项属性,这可以是数组或回调。
组件驱动程序
每个组件都可以有一个自定义驱动程序,当你需要在渲染到视图之前添加一些额外逻辑时。
将一个全命名空间类添加到组件配置的驱动程序属性中,以启用它。
最佳实践是扩展默认组件类
\LaravelAdmin\Crud\Layout\Component
以下方法可以扩展或覆盖
- getContent
- getView
- isActive
- render
字段驱动程序
同样,每个字段也可以有一个自定义驱动程序,这在需要在前端发送之前格式化后台内容时非常有用。
最佳实践是扩展默认的字段类
\LaravelAdmin\Crud\Layout\Field
您可以添加方法或重写toString方法。
视图
在布局配置中定义的文件夹中创建您的视图(默认为'layout')。模板的名称与组件的id相同,例如'basic-text.blade.php'。
注意:如果您使用自己的驱动程序,可以在'getView'方法中设置自定义视图。
创建您的管理员控制器
在您的模块中添加一个LayoutController文件,如下所示
<?php
namespace App\Http\Controllers\Admin\Pages;
use LaravelAdmin\Crud\Controllers\LayoutController as BaseController;
class LayoutController extends BaseController
{
use Shared;
protected $model = \App\Models\Page::class;
protected $instance;
protected $singular_name = 'page';
protected $plural_name = 'pages';
}
将以下路由添加到您的模块路由中
Route::resource('pages.layout', 'Admin\Pages\LayoutController');
如果您的布局在可翻译表中,则路由将是
/admin/pages/1/layout/en
如果不是,它将是
/admin/pages/1/layout
渲染布局
将以下特质添加到具有布局字段的模型中
\LaravelAdmin\Crud\Traits\HasLayout
渲染布局有几种方法。最简单的解决方案是直接从您的视图文件中渲染它
{!! $model->layout()->render() !!}
如果您想使用blade包含
@foreach ($model->layout()->components() as $component)
@include($component->getView(), $component->getContent())
@endforeach
如果您想在控制器中执行逻辑
// Controller
public function show($id)
{
$model = \App\Models\Page::findOrFail($id);
$layout = $model->layout()->components();
return view('page', compact('model','layout'));
}
// View
{!! $layout->render() !!}