mauro-pinheiro/laravel-adminlte

轻松将 Laravel 与 AdminLTE 集成


README

Latest Version on Packagist Build Status Quality Score StyleCI Total Downloads

此包提供了一个简单的方法,快速将 Laravel 6 与 AdminLTE v2 集成。除了 Laravel,它没有其他要求和依赖,因此您可以立即开始构建您的管理面板。该包仅提供了一个可扩展的 Blade 模板和高级菜单配置选项。还包括一个替换 Artisan 命令 make:auth 的选项,该选项使用 AdminLTE 风格的视图而不是默认的 Laravel 视图。

  1. 要求
  2. 安装
  3. 更新
  4. 使用
  5. make:adminlte artisan 命令
    1. 不使用 make:adminlte 命令使用认证视图
  6. 配置
    1. 菜单
    1. 插件
  7. 翻译
    1. 菜单翻译
  8. 自定义视图
  9. 问题、疑问和拉取请求

1. 要求

  • Laravel 6.0.x
  • PHP >= 7.2

2. 安装

  1. 使用 composer 需求此包

    composer require mauro-pinheiro/laravel-adminlte:dev-master
    
  2. 使用以下命令安装此包(适用于全新的 Laravel 安装)

    php artisan adminlte:install
    

您可以使用 --basic 避免安装认证脚手架

您可以使用 --force 覆盖任何文件

您还可以使用 --interactive 以引导模式进行,选择您想要安装的内容

3. 更新

  1. 要更新此包,首先更新 composer 包

    composer update jeroennoten/laravel-adminlte
    
  2. 然后,我们需要更新资产

    如果您正在使用 Laravel 5.x 的 AdminLTE 并升级 Laravel 6 版本,请删除您 public/vendor 文件夹中的 adminlte 文件夹。

    然后使用以下命令发布新资产

    php artisan vendor:publish --provider="JeroenNoten\LaravelAdminLte\AdminLteServiceProvider" --tag=assets --force
    
  3. 如果您已发布并修改了默认的主视图、页面视图或登录视图,您还需要更新它们。

    选项 1

    • 复制您修改过的视图。
    • 再次使用以下命令发布视图
      php artisan vendor:publish --provider="JeroenNoten\LaravelAdminLte\AdminLteServiceProvider" --tag=views
      
    • 重新执行您所做的修改。

    选项 2

    • 在主视图和页面视图中修改 css、js 等资产位置。

3.1 破坏性更改

  1. 版本 1.25.1 到 1.26 及以上
  • 插件配置已修改,请在此处查看新的使用方法:插件
  1. 版本 1.26 到 1.27 及以上
  • 已将 iCheck 插件替换为 icheck-bootstrap。如果您使用 iCheck 资产,请确保检查/修改资产位置。
  1. Laravel 6 版本移动了资产文件。请检查位置。
  • 如果您已修改默认视图,请编辑并修复资产注入。

4. 使用

要使用此模板,创建一个 blade 文件,并使用 @extends('adminlte::page') 扩展布局。此模板生成以下部分

  • title:用于 <title> 标签
  • content_header:页面标题,位于内容上方
  • content:页面的全部内容
  • css:额外的样式表(位于 <head> 中)
  • js:额外的 JavaScript(位于 </body> 之前)

所有部分都是可选的。您的 blade 模板可能如下所示。

{{-- resources/views/admin/dashboard.blade.php --}}

@extends('adminlte::page')

@section('title', 'Dashboard')

@section('content_header')
    <h1>Dashboard</h1>
@stop

@section('content')
    <p>Welcome to this beautiful admin panel.</p>
@stop

@section('css')
    <link rel="stylesheet" href="/css/admin_custom.css">
@stop

@section('js')
    <script> console.log('Hi!'); </script>
@stop

请注意,您还可以使用 @stack 指令为 cssjavascript 添加内容

{{-- resources/views/admin/dashboard.blade.php --}}

@push('css')

@push('js')

现在,您只需像往常一样从控制器返回此视图即可。查看 AdminLTE 以了解如何为您的管理面板构建美观的内容。

6. 配置

安装完成后,您将在配置文件夹中注意到一个adminlte.php文件。

使用它来配置标题、皮肤、菜单、URL等。所有配置选项都在注释中解释。

6.1 菜单

您可以根据以下方式配置您的菜单

'menu' => [
    'MAIN NAVIGATION',
    [
        'text' => 'Blog',
        'url' => 'admin/blog',
    ],
    [
        'text' => 'Pages',
        'url' => 'admin/pages',
        'icon' => 'fas fa-fw fa-file'
    ],
    [
        'text' => 'Show my website',
        'url' => '/',
        'target' => '_blank'
    ],
    'ACCOUNT SETTINGS',
    [
        'text' => 'Profile',
        'route' => 'admin.profile',
        'icon' => 'fas fa-fw fa-user'
    ],
    [
        'text' => 'Change Password',
        'route' => 'admin.password',
        'icon' => 'fas fa-fw fa-lock'
    ],
],

使用单个字符串,您指定一个菜单标题项以分隔项目。使用数组,您指定一个菜单项。texturlroute是必需的属性。icon是可选的,如果您省略它,您将得到一个开放的圆圈。您可以使用的是来自Font Awesome的图标。只需指定图标的名称,它就会出现在您的菜单项之前。

如果您想有条件地显示菜单项,请使用can选项。这集成了Laravel的Gate功能。如果您还需要有条件地显示标题,您需要将其包装在数组中,就像其他菜单项一样,使用header选项

[
    [
        'header' => 'BLOG',
        'can' => 'manage-blog'
    ],
    [
        'text' => 'Add new post',
        'url' => 'admin/blog/new',
        'can' => 'add-blog-post'
    ],
]

添加搜索输入

您可以在菜单中添加搜索输入,使用以下配置的菜单项

        [
            'search' => true,
            'href' => 'test',  //form action
            'method' => 'POST', //form method
            'input_name' => 'menu-search-input', //input name
            'text' => 'Search', //input placeholder
        ],

自定义菜单过滤器

如果您需要自定义过滤器,可以轻松地向此包添加您自己的菜单过滤器。当您使用第三方包进行授权(而不是Laravel的Gate功能)时,这可能很有用。

例如使用Laratrust

<?php

namespace MyApp;

use JeroenNoten\LaravelAdminLte\Menu\Builder;
use JeroenNoten\LaravelAdminLte\Menu\Filters\FilterInterface;
use Laratrust;

class MyMenuFilter implements FilterInterface
{
    public function transform($item, Builder $builder)
    {
        if (isset($item['permission']) && ! Laratrust::can($item['permission'])) {
            return false;
        }

        return $item;
    }
}

然后添加到config/adminlte.php

'filters' => [
    JeroenNoten\LaravelAdminLte\Menu\Filters\ActiveFilter::class,
    JeroenNoten\LaravelAdminLte\Menu\Filters\HrefFilter::class,
    JeroenNoten\LaravelAdminLte\Menu\Filters\SubmenuFilter::class,
    JeroenNoten\LaravelAdminLte\Menu\Filters\ClassesFilter::class,
    //JeroenNoten\LaravelAdminLte\Menu\Filters\GateFilter::class, Comment this line out
    MyApp\MyMenuFilter::class,
]

运行时菜单配置

您还可以在运行时配置菜单,例如在任何服务提供者的启动时。如果您的菜单不是静态的,例如当它依赖于您的数据库或区域设置时,请使用此功能。您还可以结合两种方法。菜单将被简单拼接,服务提供者的顺序决定菜单的顺序。

要运行时配置菜单,请注册一个处理器或回调,用于MenuBuilding事件,例如在服务提供者的boot()方法中

use Illuminate\Contracts\Events\Dispatcher;
use JeroenNoten\LaravelAdminLte\Events\BuildingMenu;

class AppServiceProvider extends ServiceProvider
{

    public function boot(Dispatcher $events)
    {
        $events->listen(BuildingMenu::class, function (BuildingMenu $event) {
            $event->menu->add('MAIN NAVIGATION');
            $event->menu->add([
                'text' => 'Blog',
                'url' => 'admin/blog',
            ]);
        });
    }

}

配置选项与静态配置文件相同。

一个更实用的例子,它实际使用了翻译和数据库

    public function boot(Dispatcher $events)
    {
        $events->listen(BuildingMenu::class, function (BuildingMenu $event) {
            $event->menu->add(trans('menu.pages'));

            $items = Page::all()->map(function (Page $page) {
                return [
                    'text' => $page['title'],
                    'url' => route('admin.pages.edit', $page)
                ];
            });

            $event->menu->add(...$items);
        });
    }

此基于事件的方法用于确保构建菜单的代码仅在实际上显示管理面板时运行,而不是在每个请求时。

活动菜单项

默认情况下,如果以下任何一个条件成立,则菜单项被认为是活动的

  • 当前路径匹配url参数
  • 当前路径是url参数的子路径
  • 如果它包含一个包含活动菜单项的子菜单

要覆盖此行为,您可以指定一个包含活动URL的active参数数组,支持星号和正则表达式。

要使用正则表达式,只需在模式前加上regex:前缀,它将自动评估。该模式将尝试匹配由request()->path()返回的URL路径,它返回不带域名当前URL。示例

[
    'text' => 'Pages',
    'url' => 'pages',
    'active' => ['pages', 'content', 'content/*', 'regex:@^content/[0-9]+$@']
]

6.2 插件

默认情况下,支持并激活了DataTablesSelect2ChartJSPaceSweetAlert2插件,并自动注入它们的CDN文件。

您还可以添加并配置新的插件,通过使用以下示例结构修改插件变量

'plugins' => [
    [
        'name' => 'Plugin Name',
        'active' => true,
        'files' => [
            [
                'type' => 'js',
                'asset' => false,
                'location' => '//cdn.plugin.net/plugin.min.js',
            ],
            [
                'type' => 'css',
                'asset' => true,
                'location' => 'css/plugin.min.css',
            ],
        ],
    ],
]

通过指定的名称字符串来设置插件名称,并使用激活值来启用/禁用插件注入。每个插件都有一个文件数组,其中包含文件类型(jscss)和位置

如果资产值是true,注入将使用asset()函数。

6.2.1 Pace插件配置

您可以通过修改CSS文件位置来更改Pace插件的样式。

    'location' => '//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/themes/{{color}}/pace-theme-{{theme}}.min.css',

颜色值:黑色、蓝色(默认)、绿色、橙色、粉色、紫色、红色、银色、白色和黄色

主题值:理发店、大计数器、弹跳、中心原子、中心圆形、中心雷达(默认)、中心简单、角落指示器、填充左边、闪光、平坦顶部、加载条、mac-osx、最小化

7. 翻译

目前,默认提供英语、德语、法语、荷兰语、葡萄牙语和西班牙语的翻译。只需在config/app.php中指定语言。如果需要修改文本或添加其他语言,可以发布语言文件。

php artisan vendor:publish --provider="JeroenNoten\LaravelAdminLte\AdminLteServiceProvider" --tag=translations

现在,您可以在resources/lang/vendor/adminlte中编辑翻译或添加语言。

7.1. 菜单翻译

此资源允许您使用lang文件,并且默认激活。

使用Lang配置菜单

首先,使用键text作为翻译字符串来配置菜单。以下是一个配置示例

    [
        'header' => 'account_settings'
    ],
        [
            'text' => 'profile',
            'url'  => 'admin/settings',
            'icon' => 'user',
        ],

Lang文件

所有翻译字符串都必须添加到所需语言的每个menu.php文件中。翻译文件位于resources/lang/vendor/adminlte/

以下是一个menu.php语言文件的示例

return [
    'account_settings'  => 'ACCOUNT SETTINGS',
    'profile'           => 'Profile',
];

要翻译菜单标题,只需使用header参数。示例

    [
        'header' => 'account_settings'
    ],
        [
            'text' => 'profile',
            'url'  => 'admin/settings',
            'icon' => 'user',
        ],

8. 定制视图

如果您需要完全控制提供的视图,可以发布它们

php artisan vendor:publish --provider="JeroenNoten\LaravelAdminLte\AdminLteServiceProvider" --tag=views

现在,您可以在resources/views/vendor/adminlte中编辑视图。

9. 问题、问题和Pull Requests

您可以在问题部分中报告问题并提问。请以ISSUE: 开头报告问题,以QUESTION: 开头提问

如果您有问题,请首先检查已关闭的问题。随着时间的推移,我已经回答了相当多的问题。

要提交Pull Request,请首先fork此存储库,创建一个新的分支,并将您的新/更新代码提交到那里。然后从您的分支打开Pull Request。有关更多信息,请参阅此指南