首页 > 解决方案 > 在 null 上调用成员函数 store()

问题描述

我只是想知道为什么这对我的项目控制器不起作用,但在其他控制器上它起作用了。

项目控制器

public function store(Request $request, $id)
{
    $categories = Category::all();
    $userId = Auth::user()->id;

    $item = new Item;

    $item->store_id = $userId;
    $item->name = $request->name;
    $item->description = $request->description;
    $item->unit_price = $request->unit_price;

    $path = $request->image->store('images', 'public');
    $item->picture = $path;

    $item->category_id = $request->category_id;

    $item->is_available = 1;
    $item->is_archived = 0;

    $item->save();

    return redirect('/store/index')->with('status', 'Item successfully added!');
}

用于创建项目数据的 HTML 表单

<form method="post" action='{{ url("item/store/$stores->id") }}' enctype="mutlipart/form-data">
    @csrf
        <input placeholder="Item Name" type="text" name="name" value="{{ old('name') }}" required autocomplete="off">
        <input placeholder="Item Description" type="text" name="description" value="{{ old('description') }}" required autocomplete="off">
        <input placeholder="000.00" type="decimal" name="unit_price" value="{{ old('unit_price') }}" required autocomplete="off">

        <input type="file" name="picture" required>

        <label>Category</label>
        <select class="form-control" name="category_id">
            <option value selected disabled>Select Category</option>
            @foreach ($categories as $category)
                <option value="{{ $category->id }}">{{ $category->name }}</option>
            @endforeach
        </select>

        <button type="submit" class="btn btn-warning">Add</button>
</form>

谢谢你的回答

标签: laravel

解决方案


没有任何输入文件名为image您的输入文件名为picture.
如果您有一个文件字段,并且您尝试使用 进行检查$request->has(‘file’),它将始终返回FALSE. 对于文件,有一个特定的方法:

$path = $request->image->store('images', 'public');
$item->picture = $path;

改成

$path = "no_image.png";

if ($request->hasFile('picture')) {
  // $path = $request->picture->store('images', 'public');
  $file = $request->picture;
  $fName = time() . $file->getClientOriginalName();
  $file->move('images', $fName );
  $path = 'images/'.$fName;
}

$item->picture = $path;

推荐阅读