laravel8.5与layuiadmin整合(14)
66.设计左侧栏目,以便用权限控制显示与操作
修改/app/Providers/AppServiceProvider.php
如下
class AppServiceProvider extends ServiceProvider { // /** * Bootstrap any application services. * * @return void */ public function boot() { // view()->composer(['admin.layout'], \App\Http\ViewComposers\SiderbarComposer::class); } }
67.建立上面的共享视图
/app/Http/ViewComposers/SiderbarComposer.php
namespace App\Http\ViewComposers; use Illuminate\Support\Facades\DB; use Illuminate\View\View; class SiderbarComposer { public function compose(View $view) { // 返回的导航数组 $sidebar = []; $topMenus = DB::table('permissions')->where(['parent_id'=>0])->select()->get()->toArray(); if($topMenus) { $top_ids = []; foreach ($topMenus as $row) { array_push($top_ids,$row->id); $sidebar[$row->id] = $row; } $secMenus = DB::table('permissions') ->whereIn('parent_id', $top_ids) ->get(); if($secMenus){ foreach ($secMenus as $sec_row) { $sidebar[$sec_row->parent_id]->children[] = $sec_row; } } } $view->with('sidebar',$sidebar); } }
68.在模板中添加权限和显示
/resources/views/admin/layout.blade.php
@foreach($sidebar as $menu) @can($menu->name) <li data-name="user" class="layui-nav-item"> <a href="javascript:;" lay-tips="{{$menu->display_name}}" lay-direction="2"> <i class="layui-icon layui-icon-user"></i> <cite>{{$menu->display_name}}</cite> </a> <dl class="layui-nav-child"> @isset($menu->children) @if($menu->children) @foreach($menu->children as $subMenu) @can($subMenu->name) <dd data-name="{{$subMenu->name}}"> <a lay-href="{{route($subMenu->name)}}">{{$subMenu->display_name}}</a> </dd> @endcan @endforeach @endif @endisset </dl> </li> @endcan @endforeach
69.为了方便测试权限,先在路由中添加一些模板
/routes/web.php
// 产品管理 Route::group(['prefix' => 'admin','middleware'=>'auth'],function() { // 产品列表管理 Route::get('products/index',[App\Http\Controllers\Admin\ProductsController::class,'index']) ->name('admin.products'); }); // 仓库管理 Route::group(['prefix' => 'admin','middleware'=>'auth'],function() { // 仓库列表管理 Route::get('warehouse/index',[App\Http\Controllers\Admin\WarehouseController::class,'index']) ->name('admin.warehouse'); // 仓库库存管理 Route::get('warehouse/stock',[App\Http\Controllers\Admin\warehouseController::class,'stock']) ->name('admin.warehouse.stock'); }); // 订单管理 Route::group(['prefix' => 'admin','middleware'=>'auth'],function() { // 订单列表管理 Route::get('orders/index',[App\Http\Controllers\Admin\OrdersController::class,'index']) ->name('admin.orders'); // 订单物流管理 Route::get('logistic/index',[App\Http\Controllers\Admin\LogisticController::class,'index']) ->name('admin.logistic'); }); // 采购管理 Route::group(['prefix' => 'admin','middleware'=>'auth'],function() { // 采购列表管理 Route::get('purchase/index',[App\Http\Controllers\Admin\PurchaseController::class,'index']) ->name('admin.purchase'); // 供应商管理 Route::get('purchase/suppliers',[App\Http\Controllers\Admin\PurchaseController::class,'suppliers']) ->name('admin.purchase.suppliers'); });
70.根据上面的路由,分别建立对应的控器和模板即可
71.方便模板显示登陆用户名,修改
/app/Http/Controllers/Admin/IndexController.php
public function layout() { $userInfo = Auth::user(); $user['id'] = $userInfo->id; $user['name'] = $userInfo->name; return view('admin.layout',compact('user'));
72.修改显示名称
/resources/views/admin/layout.blade.php
//
<cite>贤心-{{$user['name']?? ''}}</cite>
73.分别添加路由对应的权限
74.再在相关路由加上权限即可
/routes/web.php
修改如下
// 系统管理 Route::group(['prefix' => 'admin','middleware' => ['auth','permission:system.manage']],function() { Route::group(['middleware' => ['permission:admin.user']], function() { // 系统用户列表 Route::get('/user',[App\Http\Controllers\Admin\UserController::class, 'index']) ->name('admin.user'); //添加系统用户 Route::get('/create',[App\Http\Controllers\Admin\UserController::class, 'create']) ->name('admin.user.create')->middleware('permission:admin.user.create'); // 获取系统用户列表 Route::get('/data',[App\Http\Controllers\Admin\UserController::class, 'data']) ->name('admin.data'); //删除系统用户 Route::delete('user/destroy',[App\Http\Controllers\Admin\UserController::class, 'destroy']) ->name('admin.user.destroy')->middleware('permission:admin.user.destroy'); //保存用户 Route::post('/store',[App\Http\Controllers\Admin\UserController::class, 'store']) ->name('admin.user.store')->middleware('permission:admin.user.create'); //编辑用户 Route::get('user/{id}/edit',[App\Http\Controllers\Admin\UserController::class, 'edit']) ->name('admin.user.edit')->middleware('permission:admin.user.edit'); // 保存编辑用户 Route::put('user/{id}/update',[App\Http\Controllers\Admin\UserController::class, 'update']) ->name('admin.user.update')->middleware('permission:admin.user.edit'); // 给人员分配角色 Route::get('user/{id}/role',[App\Http\Controllers\Admin\UserController::class, 'role']) ->name('admin.user.role')->middleware('permission:admin.user.assignRole'); Route::put('user/{id}/assignRole',[App\Http\Controllers\Admin\UserController::class, 'assignRole']) ->name('admin.user.assignRole')->middleware('permission:admin.user.assignRole'); // 给人员分配权限 Route::get('user/{id}/permission',[App\Http\Controllers\Admin\UserController::class, 'permission']) ->name('admin.user.permission')->middleware('permission:admin.user.assignPermission'); Route::put('user/{id}/assignPermission',[App\Http\Controllers\Admin\UserController::class, 'assignPermission']) ->name('admin.user.assignPermission')->middleware('permission:admin.user.assignPermission'); }); }); // 角色管理 Route::group(['prefix' => 'admin','middleware'=>['auth','permission:system.manage']],function() { Route::group(['middleware' => ['permission:admin.role']],function() { // 展示角色列表 Route::get('role',[App\Http\Controllers\Admin\RoleController::class,'index']) ->name('admin.role'); // 获取角色数据 Route::get('role/data',[App\Http\Controllers\Admin\RoleController::class,'data']) ->name('admin.role.data'); // 添加角色 Route::get('role/create',[App\Http\Controllers\Admin\RoleController::class,'create']) ->name('admin.role.create')->middleware('permission:admin.role.create'); // 保存添加的角色 Route::post('role/store',[App\Http\Controllers\Admin\RoleController::class,'store']) ->name('admin.role.store')->middleware('permission:admin.role.create'); //编辑角色 Route::get('role/{id}/edit',[App\Http\Controllers\Admin\RoleController::class,'edit']) ->name('admin.role.edit')->middleware('permission:admin.role.edit'); // 保存编辑 Route::put('role/{id}/update',[App\Http\Controllers\Admin\RoleController::class,'update']) ->name('admin.role.update')->middleware('permission:admin.role.edit'); //删除角色 Route::delete('role/destroy',[App\Http\Controllers\Admin\RoleController::class, 'destroy']) ->name('admin.role.destroy')->middleware('permission:admin.role.destroy'); //修改角色的拥有的权限 Route::get('role/{id}/permission',[App\Http\Controllers\Admin\RoleController::class,'permission']) ->name('admin.role.permission')->middleware('permission:admin.role.assignPermission'); // 保存角色修改的权限 Route::put('role/{id}/assignPermission',[App\Http\Controllers\Admin\RoleController::class,'assignPermission']) ->name('admin.role.assignPermission')->middleware('permission:admin.role.assignPermission'); }); }); // 权限管理 Route::group(['prefix' => 'admin','middleware'=>['auth','permission:system.manage']],function() { Route::group(['middleware' => ['permission:admin.permission']],function() { // 权限展示 Route::get('permission', [App\Http\Controllers\Admin\PermissionController::class, 'index']) ->name('admin.permission'); // 获取权限数据 Route::get('permission/data', [App\Http\Controllers\Admin\PermissionController::class, 'data']) ->name('admin.permission.data'); //创建权限 Route::get('permission/create', [App\Http\Controllers\Admin\PermissionController::class, 'create']) ->name('admin.permission.create')->middleware('permission:admin.permission.create'); // 保存新创建的权限 Route::post('permission/store', [App\Http\Controllers\Admin\PermissionController::class, 'store']) ->name('admin.permission.store')->middleware('permission:admin.permission.create'); //编辑权限 Route::get('permission/{id}/edit', [App\Http\Controllers\Admin\PermissionController::class, 'edit']) ->name('admin.permission.edit')->middleware('permission:admin.permission.edit'); // 保存编辑的权限 Route::put('permission/{id}/update', [App\Http\Controllers\Admin\PermissionController::class, 'update']) ->name('admin.permission.update')->middleware('permission:admin.permission.edit'); // 删除权限 Route::delete('permission/destroy', [App\Http\Controllers\Admin\PermissionController::class, 'destroy']) ->name('admin.permission.destroy')->middleware('permission:admin.permission.destroy'); }); });
到目前为止,系统管理的功能基本使用,为了隐藏一些没有权限的操作展示,
分别对 blade模板文件加上权限判断
比如系统用户模板
/resources/views/admin/user/index.blade.php
分别在增加,删除,修改处加上判断
@can('admin.user.destroy') <button class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删 除</button> @endcan @can('admin.user.create') <a class="layui-btn layui-btn-sm" href="{{ route('admin.user.create') }}">添 加</a> @endcan
至此已经完成
以下添加一些功能测试
添加路由
/routes/web.php
// 产品管理 Route::group(['prefix' => 'admin','middleware'=>['auth','permission:products.manage']],function() { // 产品列表管理 Route::get('products/index',[App\Http\Controllers\Admin\ProductsController::class,'index']) ->name('admin.products')->middleware('permission:admin.products'); // 获取产品列表数据 Route::get('products/data', [App\Http\Controllers\Admin\ProductsController::class, 'data']) ->name('admin.products.data')->middleware('permission:admin.products'); // 产品新增 Route::get('products/create',[App\Http\Controllers\Admin\ProductsController::class,'create']) ->name('admin.products.create')->middleware('permission:admin.products.create'); // 新增保存 Route::post('products/store',[App\Http\Controllers\Admin\ProductsController::class,'store']) ->name('admin.products.store')->middleware('permission:admin.products.create'); // 产品编辑 Route::get('products/{id}/edit',[App\Http\Controllers\Admin\ProductsController::class,'edit']) ->name('admin.products.edit')->middleware('permission:admin.products.edit'); // 产品编辑保存 Route::put('products/{id}/update',[App\Http\Controllers\Admin\ProductsController::class,'update']) ->name('admin.products.update')->middleware('permission:admin.products.edit'); // 产品删除 Route::delete('products/destroy',[App\Http\Controllers\Admin\ProductsController::class,'destroy']) ->name('admin.products.destroy')->middleware('permission:admin.products.destroy'); // 编辑产品状态 Route::put('products/changeStatus',[App\Http\Controllers\Admin\ProductsController::class,'changeStatus']) ->name('admin.products.changeStatus')->middleware('permission:admin.products.edit'); // 分类管理 // 分类列表 Route::get('category/index',[App\Http\Controllers\Admin\CategoryController::class,'index']) ->name('admin.category')->middleware('permission:admin.category'); // 获取分类数据 Route::get('category/data', [App\Http\Controllers\Admin\CategoryController::class, 'data']) ->name('admin.category.data')->middleware('permission:admin.category'); // 分类新增 Route::get('category/create',[App\Http\Controllers\Admin\CategoryController::class,'create']) ->name('admin.category.create')->middleware('permission:admin.category.create'); // 新增分类保存 Route::post('category/store',[App\Http\Controllers\Admin\CategoryController::class,'store']) ->name('admin.category.store')->middleware('permission:admin.category.create'); // 分类编辑 Route::get('category/{id}/edit',[App\Http\Controllers\Admin\CategoryController::class,'edit']) ->name('admin.category.edit')->middleware('permission:admin.category.edit'); // 分类编辑保存 Route::put('category/{id}/update',[App\Http\Controllers\Admin\CategoryController::class,'update']) ->name('admin.category.update')->middleware('permission:admin.category.edit'); // 分类删除 Route::delete('category/destroy',[App\Http\Controllers\Admin\CategoryController::class,'destroy']) ->name('admin.category.destroy')->middleware('permission:admin.category.destroy'); }); // 仓库管理 Route::group(['prefix' => 'admin','middleware'=>['auth','permission:warehouse.manage']],function() { // 仓库列表管理 Route::get('warehouse/index',[App\Http\Controllers\Admin\WarehouseController::class,'index']) ->name('admin.warehouse')->middleware('permission:admin.warehouse'); // 仓库库存管理 Route::get('warehouse/stock',[App\Http\Controllers\Admin\warehouseController::class,'stock']) ->name('admin.warehouse.stock')->middleware('permission:admin.warehouse.stock'); }); // 订单管理 Route::group(['prefix' => 'admin','middleware'=>['auth','permission:orders.manage']],function() { // 订单列表管理 Route::get('orders/index',[App\Http\Controllers\Admin\OrdersController::class,'index']) ->name('admin.orders')->middleware('permission:admin.orders'); // 订单物流管理 Route::get('logistic/index',[App\Http\Controllers\Admin\LogisticController::class,'index']) ->name('admin.logistic')->middleware('permission:admin.logistic'); }); // 采购管理 Route::group(['prefix' => 'admin','middleware'=>['auth','permission:purchase.manage']],function() { // 采购列表管理 Route::get('purchase/index',[App\Http\Controllers\Admin\PurchaseController::class,'index']) ->name('admin.purchase')->middleware('permission:admin.purchase'); // 供应商管理 Route::get('purchase/suppliers',[App\Http\Controllers\Admin\PurchaseController::class,'suppliers']) ->name('admin.purchase.suppliers')->middleware('permission:admin.purchase.suppliers'); });
//文件上传接口 Route::post('uploadImg', [App\Http\Controllers\PublicController::class,'uploadImg'])->name('uploadImg');
同于上传到 storage/app/public 目录的文件可以被外部访问,还要执行以下命令
php artisan storage:link
该命令会在项目根目录下的 public 中创建一个软链 storage
指向 storage/app/public,这样,后者下面的文件才可以真正通过 Web 路径访问。
76.分别添加产品表products和产品分类表category
CREATE TABLE `products` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `keywords` varchar(255) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, `category_id` int(11) DEFAULT NULL COMMENT '分类ID', `content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci, `flag` tinyint(1) DEFAULT '1' COMMENT '1-启用,0-关闭', `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, `author` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), KEY `title` (`title`), KEY `category_id` (`category_id`), KEY `flag` (`flag`), KEY `author` (`author`), KEY `created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品表'; CREATE TABLE `category` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `name_cn` varchar(255) DEFAULT NULL COMMENT '英文名称', `parent_id` int(11) DEFAULT '0' COMMENT '父类ID', `author` varchar(50) DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`), KEY `created_at` (`created_at`), KEY `author` (`author`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品分类';
根据对应的layuiadmin修改对应的模板即可
最后,依次加上对应的权限
至次,整合完成
安装 ueditor
https://github.com/overtrue/laravel-ueditor
以下说明route/api.php
77. 在route/api.php 添加
// 测试API功能 Route::group(['prefix' => 'test'], function() { Route::get('index',[App\Http\Controllers\Api\TestController::class,'index']); });
78.新增 /app/Http/Controllers/Api/TestController.php
namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; class TestController extends Controller { public function index() { echo __CLASS__ . ' -> ' . __METHOD__; } }
直接访问
域名/api/test/index
即可
79.命令行执行laravel程序
比如获取最新10个产品
执行以下命令
php artisan make:command products/getProductsList 10 0
此时会生成文件 /app/Console/Commands/products/getProductsList.php
80.在文件中
/app/Console/Kernel.php
添加如下
class Kernel extends ConsoleKernel { // protected $commands = [ \App\Console\Commands\products\command:products_getProductsList ]; // }
81.打开文件
/app/Console/Commands/products/getProductsList.php
修改如下方法
// class getProductsList extends Command {
// 两个参数 protected $signature = 'command:products_getProductsList {num} {start}'; protected $description = '获取最新10个产品'; /** * Execute the console command. * * @return int */ public function handle() {
$num = $this->argument('num');
$start = $this->argument('start');
$products = DB::table('products')->take($num)->get(); foreach ($products as $product) { echo $product->id . ':' . $product->title . "\n"; } } // }
执行以下脚本即可
php ./artisan command:products_getProductsList 10 0
82.生在迁移数据表文件
参考如下
https://github.com/oscarafdev/migrations-generator
php artisan migrations:generate
或
php artisan migrate:generate table1,table2,table3,table4,table5