- 这个周末有空更新了monday-shop 商城
期间遇到的大大小小的问题, 特别是后台把laravel-admin更新到最新版本, 很喜欢这个后台, 因为让后台程序员能很专注的写后台的代码
-
遇到的第一个问题就是,
composer install
依赖错误
之前composer.lcok
锁定了使用laravel-china
的镜像源, 更换成阿里的之后已经正常使用阿里 composer 镜像源 -
laravel-admin
升级处理问题
-
这里有一个删除和上架(使用软删除)功能
-
更新了版本,使用的是
DropdownActions
替代了以前的Actions
-
这个地方遇见了两个问题
-
软删除的数据无法进入
Action
, 已经下架(软删除)的商品无法上架(抛出异常模型不存在)
-
无法执行强制删除商品(删除变为下架,并不是真正的删除)
开始解决问题
-
控制器中的确有
destroy
方法并且的确执行了强制删除, 没能删除成功的原因,肯定是因为未进入这个方法
-
尝试执行了一次删除,通过查看网络请求,并非请求到指定的控制器,而是到达了
_handle_action_
路由, 通过源码查到了指向的控制器为
-
所有的
Action
都是通过HandleController::handleAction
统一处理 -
方法的第一行是通过
Request
参数解析出控制器. -
我们前面有一个错误是找不到模型, 所以我们关注这行代码:
$model = $action->retrieveModel($request);
-
上面解析了模型, 然后通过
$action->setRow($model);
填充进action
-
所以我们查看
retrieveModel
方法做了什么,因为这个方法是继承的,我们去到父类查看 -
先从
Request
中获取主键,然后再获取模型类,之后直接通过模型类的Model::findOrFail
查找,我们之前找不到模型的错误就是findOrFail
抛出的异常
-
所以解决方法也很简单,我们在实际的
Action
类重写这个方法 -
强制查询出软删除的数据即可, 到此便可正常上下架商品
上下架的这个错误解决了, 删除功能之所以不能删除也比较容易找到答案了
-
查看
DropdownActions
类, 发现里面有三个默认的Action
即编辑,显示,删除
-
我们查看
Delete Action
类, 发现这个类只是简单的删除, 并不是强制删除
-
所以, 我们在使用的地方移除掉这个默认删除操作,增加一个强制删除
-
强制删除操作做的事情也很简单,只要使用
Laravel
自带的强制删除方法即可
-
至此, 删除便可完成