完成准备工作后我们的侧边栏应该是这样
一: 广告管理
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");
![](https://i-blog.csdnimg.cn/blog_migrate/abe98122e6f6186b86483b3d95b3b79e.png)
到此,广告位添加完成
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