advaith/seamless-admin

为Laravel提供无缝的Django风格管理面板设置

v0.6.2 2024-03-07 10:33 UTC

This package is auto-updated.

Last update: 2024-09-15 08:16:00 UTC


README

为Laravel提供无缝的Django风格管理面板设置。为管理员提供简单、非CMS表格管理器。

Latest Stable Version License Tests

Screenshot

支持Laravel版本 6.*7.*8.*9.*10.*11.*。请确保已安装至少PHP 8.0.2

安装步骤

  1. 要求包

    运行以下命令将包安装到您的Laravel应用程序中

    composer require advaith/seamless-admin
  2. 使用以下命令发布资产和配置文件

    php artisan vendor:publish --provider="Advaith\SeamlessAdmin\SeamlessAdminServiceProvider"

    这将创建配置文件夹中的seamless.php配置文件。这还将发布与此包相关的所有资产。

    注意:如果您在运行composer update后发现UI或管理员功能无法正常工作,请再次运行此命令,并使用标志--tag="seamless-admin-assets"重新发布资产。这将用新的资产覆盖现有的资产。

缓存

SeamlessAdmin包使用缓存来提高包路由的加载时间。如果您在侧边栏中找不到您注册的模型,请尝试清除缓存。要清除缓存,请运行

php artisan seamless:clear

使用方法

在您的任何模型中使用提供的特性SeamlessAdmin开始使用此包。示例

<?php

namespace App\Models;

use Advaith\SeamlessAdmin\Traits\SeamlessAdmin;
...

class Post extends Model
{
    use SeamlessAdmin;
    ...
}

Et Voila!这就是开始的所有步骤。登录后,请访问/admin以访问管理仪表板。

配置

seamless-admin.php配置文件

  • prefix:更改管理员路由的前缀。但是,这不会更改路由的名称。默认情况下,将使用/admin作为前缀
  • api_prefix:更改API路由的前缀。
  • middleware:管理员路由的全局中间件。默认情况下,已设置auth中间件。
  • api_middleware:API路由的中间件组。
  • layout:您可以通过更改此选项来自定义管理员页面使用的布局。确保适当提供,以包含动态内容。

模型特定配置

所有模型特定配置都应该放在相应的模型文件中。

属性

  • public bool $hasAdminPage:将其设置为false以防止模型在管理页面上显示。使用此属性而不是从模型中移除特性的优点是,当其他模型尝试检查外键时,这将用作获取其他列的提示。

  • public string $adminIcon:我们使用lucide作为图标。输入您想使用的图标的名称。

  • public string $adminGroup:添加一个值以更改模型在侧边栏中显示的组。

  • protected $primaryKey:模型的主键将在需要时使用,即使它不是id

  • protected $fillableadminIndexFields使用来自$fillable$hidden变量的数据来显示默认值

  • protected $hiddenadminIndexFields使用来自$hidden$hidden变量的数据来显示默认值

方法

public function adminIndexFields(): array

默认情况下,管理员索引页面将显示protected $fillable的所有内容,排除protected $hidden。要覆盖此内容,请使用方法adminIndexFields并返回字段数组。

public function adminIndexFields(): array
{
    return [
        'title',
        'content'
    ];
}
public function adminOnCreate(array $fields): array

使用此方法来更改创建时保存的数据。例如,对于用户模型

public function adminOnCreate(array $fields): array
{
    return [
        ...$fields,
        'password' => bcrypt($fields['password'])
    ];
}

此方法也可以用作钩子,因为它在创建条目之前触发。

public function adminOnEdit(array $fields): array

使用此方法在编辑时更改保存的数据。它的功能与adminOnCreate方法类似。

public function adminCanAccessIndex(): bool

确定登录用户是否有权限访问模型数据。禁用对索引页的访问将移除当前用户对所有功能(查看、创建、编辑、删除)的访问。

public function adminCanAccessCreate(): bool

确定登录用户是否有权限创建新条目。

public function adminCanAccessEdit(): bool

确定登录用户是否有权限编辑数据库中的条目。

public function adminCanAccessDelete(): bool

确定登录用户是否有权限从数据库中删除数据。

public function __toString(): string

一个将模型实例转换为字符串的魔法方法。默认情况下,使用$fillable字段。用法示例

public function __toString(): string
{
    return "{$this->firstName} {$this->lastName}";
}

钩子

  • public function adminEdited(): void:当模型被编辑时,此钩子会被触发
  • public function adminCreated(): void:当模型被创建时,此钩子会被触发

添加自定义页面

要向侧边栏添加自定义页面,请使用应用程序的AppServiceProvider中的SeamlessAdmin外观。示例

<?php

namespace App\Providers;

use Advaith\SeamlessAdmin\Facades\SeamlessAdmin;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    ...
    public function boot()
    {
        SeamlessAdmin::add('files.index', 'File', [
            'isAllowed' => fn() => auth()->user()->can('manage_files'),
            'icon' => 'layout',
            'group' => 'Blog'
        ]);
    }
}

add方法接受3个参数

  1. 路由名称。这是你在路由文件中定义的路由名称。注意:这不是url本身,而是路由的名称。
  2. 路由别名。这是将在管理员页面侧边栏中显示的名称。
  3. 一个可选的数组,包括
    • isAllowed:路由是否对当前用户可见
    • icon:侧边栏中要显示的图标。我们使用lucide作为图标
    • group:侧边栏中的组,自定义路由应添加到此组。

要充分利用自定义页面,请在blade文件中扩展布局seamless::layout。示例

@extends('seamless::layout')

@section('title', 'Title')

@section('header')
    <!-- This section will be appened to the header -->
@endsection

@section('content')
    <div class="container px-4 py-2">
        The actual content here
    </div>
@endsection

@section('footer')
    <!-- This section will be added to the bottom of the page -->
@endsection

将很快添加更多配置选项。如需请求新功能,请创建带有标签feature-request的新问题。