角色编辑
路由
Route::middleware('auth')->group(function () {
.
.
.
// 编辑角色页面
Route::get('/roles/{id}/edit', [RoleController::class, 'edit'])->name('roles.edit');
// 执行编辑角色
Route::post('/roles/{id}', [RoleController::class, 'update'])->name('roles.update');
// 删除角色
Route::delete('/roles', [RoleController::class, 'destroy'])->name('roles.destroy');
});
控制器 编辑功能
App/Http/Controllers/RoleController.php
// 编辑角色
public function edit($id)
{
$role = Role::findOrFail($id);
$hasPermissions = $role->permissions->pluck('name');
$permissions = Permission::orderBy('name', 'ASC')->get();
return view('roles.edit', compact('role', 'hasPermissions', 'permissions'));
}
// 执行编辑角色
public function update($id, Request $request)
{
$role = Role::findOrFail($id);
$validator = Validator::make($request->all(), [
'name' => 'required|unique:roles,name,' . $id . ',id',
]);
if ($validator->passes()) {
$role->name = $request->name;
$role->save();
if (!empty($request->permission)) {
$role->syncPermissions($request->permission);
} else {
$role->syncPermissions([]);
}
return redirect()->route('roles.index')->with('success', '角色编辑成功~~');
} else {
return redirect()->route('roles.edit')->withErrors($validator)->withInput();
}
}
前端模版
resources/views/roles/list.blade.php 添加跳转页路由
<a href="{{ route('roles.edit',$role->id) }}"
class="bg-slate-700 text-sm rounded-md text-white px-3 py-2 hover:bg-slate-600">编辑</a>
resources/views/roles/edit.blade.php
<x-app-layout>
<x-slot name="header">
<div class="flex justify-between">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
角色 / 新增
</h2>
<a href="{{ route('roles.index') }}"
class="bg-slate-700 text-sm rounded-md text-white px-5 py-3">角色列表</a>
</div>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900">
<form action="{{ route('roles.update', $role->id) }}" method="post">
@csrf
<div>
<label for="" class="text-sm font-medium">角色名</label>
<div class="my-3">
<input value="{{old('name',$role->name)}}" name="name" placeholder="角色名" type="text"
class="border-gray-300 shadow-sm w-1/2 rounded-lg">
@error('name')
<p class="text-red-400 font-medium">{{ $message }}</p>
@enderror
</div>
<label for="" class="text-sm font-medium">权限</label>
<div class="grid grid-cols-4 mb-3">
@if($permissions->isNotEmpty())
@foreach($permissions as $permission)
<div class="mt-3">
<input
{{ ($hasPermissions->contains($permission->name)) ? 'checked' : '' }} type="checkbox"
id="permission-{{ $permission->id }}" class="rounded"
name="permission[]"
value="{{$permission->name}}">
<label for="">{{$permission->name}}</label>
</div>
@endforeach
@endif
</div>
<button class="bg-slate-700 text-sm rounded-md text-white px-5 py-3">编辑</button>
</div>
</form>
</div>
</div>
</div>
</div>
</x-app-layout>
控制器 删除功能
App/Http/Controllers/RoleController.php
// 删除角色
public function destroy(Request $request)
{
$id = $request->id;
$role = Role::find($id);
if ($role == null) {
session()->flash('error', '未找到角色~');
return response()->json([
'status' => false
]);
}
$role->delete();
session()->flash('success', '角色删除成功~');
return response()->json([
'status' => true
]);
}
前端模版
resources/views/roles/list.blade.php
<a href="javascript:void(0);" onclick="deletePermission( {{$role->id}} )"
class="bg-red-600 text-sm rounded-md text-white px-3 py-2 hover:bg-red-500">删除</a>
以上:onclick="deletePermission( {{$role->id}} )",删除按钮绑定。
- 开始书写ajax无刷新删除
.
.
.
<x-slot name="script">
<script type="text/javascript">
function deletePermission(id) {
if (confirm("您确定要删除么~~")) {
$.ajax({
url: '{{route('roles.destroy')}}',
type: 'delete',
data: {id: id},
dataType: 'json',
headers: {
'x-csrf-token': '{{ csrf_token() }}'
},
success: function (response) {
window.location.href = '{{ route('roles.index') }}';
}
});
}
}
</script>
</x-slot>
</x-app-layout>