Featured image of post [monday-shop]更新依赖遇到的一些问题以及解决方法

[monday-shop]更新依赖遇到的一些问题以及解决方法

这个周末有空更新了monday-shop 商城, 总结一下期间遇到的大大小小的问题.

  • 这个周末有空更新了monday-shop 商城
    期间遇到的大大小小的问题, 特别是后台把laravel-admin更新到最新版本, 很喜欢这个后台, 因为让后台程序员能很专注的写后台的代码

  • 遇到的第一个问题就是, composer install 依赖错误
    之前composer.lcok锁定了使用laravel-china的镜像源, 更换成阿里的之后已经正常使用阿里 composer 镜像源

  • laravel-admin升级处理问题

  • 这里有一个删除上架(使用软删除)功能

  • 更新了版本,使用的是DropdownActions替代了以前的Actions

  • 这个地方遇见了两个问题

  1. 软删除的数据无法进入Action, 已经下架(软删除)的商品无法上架(抛出异常模型不存在)

  2. 无法执行强制删除商品(删除变为下架,并不是真正的删除)


开始解决问题

  • 控制器中的确有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自带的强制删除方法即可

  • 至此, 删除便可完成