教你使用laravel admin30分钟开发一个企业后台之-cms搭建

完成准备工作后我们的侧边栏应该是这样


一: 广告管理

1: 建立数据表,并生成migrate、model、controller

打开Helpers - Scaffold我们会有这样一个页面


Table name: 数据表名称, 如 adverts

Model: 模型名称, 如 Advert

Controller: 控制器名称,如AdvertController

注意的是: Run migrate有时候不生效,需要手动运行命令php artisan migrate

fields添加字段, 

Nullable勾选表示可以为空


广告表以及广告位置表结构如下:

 Schema::create('advert_types', function (Blueprint $table) {
            $table->increments('id');
            $table->string('advert_type_name');
            $table->timestamps();
        });
Schema::create('adverts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('advert_desc');
            $table->string('image');
            $table->string('url');
            $table->integer('advert_type_id');
            $table->timestamps();
        });

2:建立路由

在app\Admin\routes.php中的 function (Router $router)中添加

$router->resource('advert_type', 'AdvertTypeController');
$router->resource('advert', 'AdvertController');

3: 配置后台菜单

在后台Admin下面的Menu选项配置后台菜单


Parent : 父级菜单,根目录为root

Title: 在侧边栏显示的名称,如Advant

icon: 在侧边栏显示的图标

url: 在侧边栏显示的连接,如:advant,跟配置的路由一致

4: 广告位添加

laravel admin 真的做了很多, 我们只需要在controller里添加2行代码,我们的广告位添加就完成了

第一行代码: 用于在列表显示名称,在protected function grid()里添加

$grid->advert_type_name('Advert Type Name');

括号里的填写列表名称,如广告位名称


第二行代码: 用于表单,在protected function form()里添加

 $form->text('advert_type_name', 'Name')->rules("required");

到此,广告位添加完成

5:广告添加

在添加之前,我们需要建立广告位与广告的一对多关系

广告位有多个广告

public function adverts()
    {
        return $this->hasMany(Advert::class);
    }

广告属于广告位

public function advert_type()
    {
        return $this->belongsTo(AdvertType::class);
    }

6: 广告位选择

laravel admin 提供了表单便捷方法,如text、textarea、 select等,同时也提供一些特殊的表单,如number date、color等

http://laravel-admin.org/docs/#/zh/model-form-fields

使用非常方便,如我们广告位选择要用到的select

$form->select('advert_type_id', 'Advert Type')->options(AdvertType::pluck('advert_type_name', 'id'));

options提供一个键值对数组,表示option的value和text

7: 图片上传

laravel admin的图片上传也很简单

在config\admin.php中有图片的配置

/*
     * Laravel-admin upload setting.
     */
    'upload' => [

        'disk' => 'admin',

        'directory' => [
            'image' => 'images',
            'file'  => 'files',
        ],
    ],

只配置这里是不行的,你会得到一个报错,大概意思就是没有 disk admin,这需要在config\filesystem.php中配置,

在config\filesystem.php中找打disks,在里面天津admn选项

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
        ],

        'admin' => [
            'driver' => 'local',
            'root' => public_path('uploads'),
            'visibility' => 'public',
            'url' => env('APP_URL').'/uploads',
        ],

    ],

配置好后直接在protected function form()里添加

$form->image('image', 'Image')->rules('mimes:gif,jpg,png');

这样就可以上传图片了,


8: 上传多图

上传多图使用

$form->multipleFile('gallery', 'Gallery')->rules('mimes:gif,jpg,png');

多图在mysql中是使用json的格式存储的,所以需要配置模型

public function setGalleryAttribute($gallery)
    {
        if (is_array($gallery)) {
            $this->attributes['gallery'] = json_encode($gallery);
        }
    }

    public function getGalleryAttribute($gallery)
    {
        return json_decode($gallery, true);
    }


广告表单

$form->text('advert_desc', 'Desc')->rules("required");
            # 获取所有广告类型
            $form->select('advert_type_id', 'Advert Type')->options(AdvertType::pluck('advert_type_name', 'id'));
            $form->url('url', 'Url')->rules("required");
            $form->image('image', 'Image')->rules('mimes:gif,jpg,png');

到此,广告管理完成


二: 导航管理

我们做cms是很多时候都会为多级菜单头疼,现在laravel admin为我们解决了这个问题,数据模型树

http://laravel-admin.org/docs/#/zh/model-tree

1: 同样,先使用脚手架搭建好后台,并在routes里面添加路由,在侧边栏添加导航管理

2: 因为要使用到模型树,需要在model中配置tree

use Encore\Admin\Traits\AdminBuilder;
use Encore\Admin\Traits\ModelTree;
use ModelTree, AdminBuilder;

3: controller中添加表单

use Encore\Admin\Tree;
$form->select('parent_id', trans('admin.parent_id'))->options(Category::selectOptions());
            $form->text('title', trans('admin.title'))->rules('required');
            $form->text('keywords', 'Keywords')->rules('nullable');
            $form->text('description', 'Description')->rules('nullable');
            $form->number('order', 'Order')->default(50);

这就完成了导航




三: 文章管理

1: 一样,先用脚手架完成后台搭建

2: 完成导航与文章的一对多关系

public function articles()
    {
        return $this->hasMany(Article::class);
    }

    public function products()
    {
        return $this->hasMany(Product::class);
    }

    public function jobs()
    {
        return $this->hasMany(Job::class);
    }

    public function pages()
    {
        return $this->hasMany(Page::class);
    }

在Article、Product、Job、Page的Model中添加

public function category()
    {
        return $this->belongsTo(Category::class);
    }

表单基本一样

$form->select('category_id', 'Category')->options(Category::selectOptions());
            $form->text('title', 'Title')->rules("required");
            $form->text('keywords', 'Keywords')->rules('nullable');
            $form->text('description', 'Description')->rules('nullable');
            $form->image('image', 'Image')->rules('mimes:gif,jpg,png');
            $form->multipleFile('gallery', 'Gallery')->rules('mimes:gif,jpg,png');
            $form->number('order', 'Order')->default(50);
            $form->textarea('content', 'Content');


git地址: https://github.com/tang05709/laravel-admin-base-cms

猜你喜欢

转载自blog.csdn.net/tang05709/article/details/80843514