You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.6编辑Post时触发getClientOriginalName() on null错误求助

解决Laravel 5.6编辑帖子时Call to a member function getClientOriginalName() on null错误

嘿,我来帮你排查这个问题!你遇到的Call to a member function getClientOriginalName() on null错误,本质是编辑帖子时没有上传新图片的情况下,代码依然尝试对null的图片文件对象调用方法,结合你的代码,我整理了具体的修复步骤:

1. 修复PostController的核心逻辑问题

(1)修正edit方法的笔误

你的edit方法里写错了模型名,Pots::find($id)应该是Post::find($id),否则会找不到模型实例:

public function edit($id) {
    $post = Post::find($id);
    return view('admin.posts.edit', compact('post'));
}

(2)重构update方法的图片处理逻辑

当前update方法不管用户是否上传新图片,都直接尝试获取图片文件并调用方法,这就是null错误的根源。我们需要先判断是否有新图片上传,再执行对应的逻辑,同时还要修正代码里的空格错误(比如$request->file('image ')多了空格)和重复更新的问题:

public function update(Request $request, $id) {
    // 编辑时图片为可选,所以验证规则改为nullable
    $this->validate($request, [
        'title' => 'required',
        'descrption' => 'required',
        'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $post = Post::find($id);
    $requestData = $request->all();

    // 只有当用户上传了新图片时才处理文件
    if ($request->hasFile('image')) {
        $image = $request->file('image');
        $fileName = $image->getClientOriginalName();
        // 把图片移动到uploads目录
        $image->move(base_path() . '/public/uploads/', $fileName);
        $requestData['image'] = $fileName;
    }

    // 只需要一次更新操作即可
    $post->update($requestData);

    // 修正拼写错误:succes → success
    return redirect()->route('posts.index')->with('success', 'Post was updated');
}

(3)修复store方法的冗余代码

你的store方法里重复调用了Post::create,这会创建两条重复的帖子记录,需要删掉其中一条:

public function store(Request $request) {
    $this->validate($request, [
        'title' => 'required|string|max:255',
        'descrption' => 'required',
        'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $image = $request->file('image');
    $fileName = $image->getClientOriginalName();
    $request->file('image')->move(base_path() . '/public/uploads/', $fileName);
    
    $requestData = $request->all();
    $requestData['image'] = $fileName;
    
    // 只保留一条创建语句
    Post::create($requestData);

    // 修正拼写错误:succes → success
    return redirect()->route('posts.index')->with('success', 'Post created successfully');
}

2. 补充说明

  • 编辑视图的代码是正常的,它已经显示了原图片,并且支持预览新上传的图片,不需要修改。
  • 建议统一字段名拼写:你的代码里用了descrption,正确拼写是description,如果数据库字段是后者,记得同步修改视图和控制器里的字段名,避免后续出现其他问题。

内容的提问来源于stack exchange,提问作者louisse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:59:01