博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel 制作通用的curd 后台操作
阅读量:4111 次
发布时间:2019-05-25

本文共 3498 字,大约阅读时间需要 11 分钟。

[TOC]

在后台简单的单表操作,我们一般会像下面这样执行curd:

改造前的controller文件

$washFeeRequest->car_id, 'wash_id' => $washFeeRequest->wash_id, 'price' => $washFeeRequest->price, 'create_time' => time(), ]; if (!Washfee::create($data)) { $msg = '创建失败'; }else{ $msg = '创建成功'; } session()->flash('msg',$msg); return redirect()->route('washfees.index'); } public function edit(Washfee $washfee){ return view('admin.washFees.edit',compact('washfee'); } public function update(WashFeeRequest $washFeeRequest, Washfee $washfee) { if ($washFeeRequest->isMethod('PUT')) { $washfee->car_id = $washFeeRequest->car_id; $washfee->wash_id = $washFeeRequest->wash_id; $washfee->price = $washFeeRequest->price; if (!$washfee->save()) { $msg = '修改失败'; }else{ $msg = '修改成功'; } } session()->flash('msg', $msg); return redirect()->route('washfees.index'); } public function destroy(Washfee $washfee) { if (!$washfee->delete()) { $msg = '删除失败'; } else { $msg = '删除成功'; } session()->flash('msg', $msg); return redirect()->back(); }}

我们发现所有的单表操作里面,store\update\destroy 这几个方法几乎都是一样的,所以可以抽取这些方法的共性来提升我们的代码可复用性。

前置条件:

  1. 所有的model都需要设置fillable这个属性,至于为什么,后面说
  2. 所有的controller的模型验证都是通过request类来进行验证的
  3. 建立通用的curd trait

改造后的代码:

  1. model文件
  1. request文件
route('authGroup'); return [ 'title' => 'required|min:2|unique:auth_group,title,' . $authGroup['id'] . ',id', 'description' => 'nullable', 'status' => 'between:0,1' ]; }}
  1. 新增加的commonCurd文件
getFillable() as $key) { if ($request->has($key)) { $model->$key = $request->$key; } } //保存 if (!$model->save()) { $msg = '修改失败'; session()->flash('msg', $msg); } else { $msg = '修改成功'; session()->flash('msg', $msg); } } public function commonStore(FormRequest $request, $model) { $data = []; $m = new $model; foreach($m->getFillable() as $key){ if($request->has($key)){ $data[$key] = $request->$key; } } if (!$model::create($data)) { $msg = '创建失败'; }else{ $msg = '创建成功'; } session()->flash('msg',$msg); } public function commonDestroy(Model $model) { if (!$model->delete()) { $msg = '删除失败'; } else { $msg = '删除成功'; } session()->flash('msg', $msg); }}
  1. 改造后的controller文件,我用了另一个文件演示改造后的代码
commonStore($authGroupRequest,WashFee::class); return redirect()->route('authGroups.index'); } public function edit(AuthGroup $authGroup) { $title = '用户组'; return view('admin.authGroups.edit', compact('title', 'authGroup')); } public function update(AuthGroupRequest $authGroupRequest, AuthGroup $authGroup) { //改造后的代码,如果该model属性多的话可以减少很多的代码量 $this->commonUpdate($authGroupRequest, $authGroup); return redirect()->route('authGroups.index'); } public function destroy(AuthGroup $authGroup) { $this->commonDestroy($authGroup); return redirect()->route('authGroups.index'); }}

下面是我在提交update时打印的数据:

image.png

可以看到原始数据和修改后的数据,并且没有提交的数据是不变的(有些字段在表单里面没有)

转载地址:http://xhrsi.baihongyu.com/

你可能感兴趣的文章
Android中AsyncTask的简单用法
查看>>
Jenkins 启动命令
查看>>
剑指offer算法题分析与整理(三)
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
fastcgi_param 详解
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
Flutter Boost的router管理
查看>>
iOS开发支付集成之微信支付
查看>>
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>