关于图像修改为何不使用此前 Handles/ImageUploadHandler.php 呢

本章节的图片上传/修改,为何不使用此前Handles/ImageUploadHandler.php呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

仍然使用的是Handles/ImageUploadHandler.php,调用的方法是一样的
file
只是 app/Models/User.php 中定义的是图像修改器,以防连接不完整
file

5年前 评论
讨论数量: 4

仍然使用的是Handles/ImageUploadHandler.php,调用的方法是一样的
file
只是 app/Models/User.php 中定义的是图像修改器,以防连接不完整
file

5年前 评论

@sunnylin 这下明白了,代码自己还得多读,非常感谢!!

5年前 评论

@sunnylin 实际测试并没有走进你截图的流程 dd方法并没有断点输出信息 后台框架应该是自己成了路由 有后台专门的store方法

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use App\Models\User;
    use App\Http\Requests\UserRequest;
    use App\Handlers\ImageUploadHandler;


    class UsersController extends Controller
    {

        public function __construct()
        {
            $this->middleware('auth', ['except' => ['show']]);
        }

        public function show(User $user)
        {
            return view('users.show', compact('user'));
        }
        public function edit(User $user)
        {
            $this->authorize('update', $user);
            return view('users.edit', compact('user'));
        }

        public function update(UserRequest $request, ImageUploadHandler $uploader,User $user)
        {   dd($request->avatar);
            $this->authorize('update', $user);
            $data = $request->all();

            if ($request->avatar) {
                $result = $uploader->save($request->avatar, 'avatars', $user->id, 416);
                if ($result) {
                    $data['avatar'] = $result['path'];
                }
            }
            $user->update($data);
            return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功!');
        }
    }

file php artisan route:list 之后发现admin框架有生成自己专门的路由和控制器 所以上传图片压根不是走的原本的user控制器的store方法
否则 调用Handles/ImageUploadHandler.php 的save后 返回的就是纠正过后的URL 是不会出错的

我觉得用属性修改器去修复错误的修改逻辑 不太妥当 当业务逻辑复杂到多处各种方案都需要更新的时候 属性修改的逻辑判断 要考虑各种输入情况 如果能有办法单独重写这些控制器的逻辑就最好了 另外我的环境是laravel 8 如果我这里的情况是因为和你们的版本有出入 请见谅

3年前 评论
sunnylin 3年前
tendollor (作者) 3年前
sunnylin 3年前

经过测试 确实是走的fileUpload执行的上传图片 而且是 触发的后台任务执行 路由和控制器的添加是composer引入加入的AutoLoad机制实现的 vendor\composer\autoload_classmap.php

文件路径 vendor\summerblue\administrator\src\controllers\AdminController.php

/**
 * The POST method that runs when a user uploads a file on a file field.
 *
 * @param string $modelName
 * @param string $fieldName
 *
 * @return JSON
 */
public function fileUpload($modelName, $fieldName)
{
    $fieldFactory = app('admin_field_factory');

    //get the model and the field object
    $field = $fieldFactory->findField($fieldName);

    return response()->JSON($field->doUpload());
}

整个后台都是基于自己的控制器完成数据操作的 如果没有很好的重写方案 会很难用

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!