Laravel Admin 的 Crud 包

安装数: 2,095

依赖关系: 0

建议者: 0

安全: 0

星星: 3

关注者: 6

分支: 1

公开问题: 2

类型:laravel-package

v2.0.9 2024-09-04 12:28 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() !!}