【问题标题】:Unable to obtain instance of HTTP request in Laravel 5.8在 Laravel 5.8 中无法获取 HTTP 请求实例
【发布时间】:2019-07-14 21:59:38
【问题描述】:

我在使用Illuminate\Http\Request 类检索表单值时遇到问题。

我有一个创建产品的端点和另一个更新它的端点,像这样设置

Route::post('products', 'ProductController@store');

Route::put('products/{product}', 'ProductController@update');

ProductController 中的 storeupdate 方法是

public function store(Request $request)
{
    // validate inputs
    $validator = Validator::make($request->all(), [
        'name'      => 'required',
        'category'  => 'required',
        'status'    => 'required',
        'price'     => 'required',
        'image'     => 'required|image|mimes:jpeg',
        'interest'  => 'required'
    ]);

    // return 401 response if validation fails
    if ($validator->fails()) {
        return response()->json([$validator->errors()], 401);
    }

    // create & store the product
    if ($product = Product::create([
        'name'      => $request->name,
        'category'  => $request->category,
        'status'    => $request->status,
        'price'     => $request->price,
        'interest'  => $request->interest,
    ])) {
        // store the product image
        $file = $request->file('image');
        $destinationPath = "public/images/products";
        $filename = 'pramopro_' . $product->name . '_' . $product->id . '.' . $file->extension();

        Storage::putFileAs($destinationPath, $file, $filename);

        ProductImage::create([
            'product_id'    => $product->id,
            'name'          => $filename
        ]);
    }

    // return new product
    return new ProductResource($product);
}

public function update(Request $request, Product $product)
{
    // dd($request);

    // validate inputs
    $validator = Validator::make($request->all(), [
        'name'      => 'required',
        'category'  => 'required',
        'status'    => 'required',
        'price'     => 'required',
        'image'     => 'required|image|mimes:jpeg',
        'interest'  => 'required'
    ]);

    // return 401 response if validation fails
    if ($validator->fails()) {
        return response()->json([$validator->errors()], 401);
    }

    // update this product
    if ($product) {
        $product->update($request->all());

        return new ProductResource($product);
    } else {
        return response()->json(["error" => "Not found"], 404);
    }
}

现在,当我在 postman 中测试端点时,我可以成功创建新的产品记录。但是,如果我尝试更新产品,即使所有必填字段都已填写,我也会收到 401 unauthorized 错误。 dd($request)returns null 但dd($product) 按预期返回产品。

也许我一直在努力寻找它,所以我错过了一些东西。我做错了什么?

【问题讨论】:

  • 您是否收到任何关于验证的 401 特定错误?您确定您的 put 路由不在 auth 中间件组中吗?
  • 存储和更新路由都不受 auth 中间件的保护。它只是返回所有字段名称,说明它们是必需的。 401 实际上是验证错误,但我提供所有字段的方式与创建时相同
  • 您确定要使用 Postman 传递一组全新的参数?它们不是未选中的,您是否已将其设置为 PUT?
  • 我很确定
  • Php 和 Laravel 不理解 PUT 请求,除非您在请求中指定名称为 _method 和值 PUT 的隐藏输入。

标签: php laravel laravel-5.8


【解决方案1】:

这就是我认为$request返回null的原因

  • 存储和更新请求同名。同一网页中的两个输入名称或选择名称或文本区域名称不能相同。如果它相同,它总是会得到第一个,这就是它返回 null 的原因,因为第一个是空的。
  • 您拨打的姓名不正确

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多