laravel 请求验证规则传递参数

laravel request validation rules pass parameter

这里开门见山,我想知道是否可以在Laravel.

中的validation rule上传递参数

这是我的代码:

我需要将 $product->id 传递给 ProductUpdateRequest class。

我已经阅读了一些文章,但无济于事,无法将参数传递给它。我的另一个解决方案是不使用验证规则 class 并使用 $request->validate[()] 直接在控制器上进行验证。因为我可以访问控制器上的 $product->id,所以我可以轻松地进行验证。但出于好奇,我有办法在 validation class 上传递 $product->id 吗?

控制器

public function update(ProductUpdateRequest $request, Product $product)
    {
        $request['detail'] = $request->description;
        unset($request['description']);
        $product->update($request->all());

        return response([
            'data' => new ProductResource($product)
        ], Response::HTTP_CREATED);
    }

验证规则

public function rules()
{
    return [
        'name' => 'required|max:255|unique:products,name'.$product->id,
        'description' => 'required',
        'price' => 'required|numeric|max:500',
        'stock' => 'required|max:6',
        'discount' => 'required:max:2'
    ];
}

任何 suggestions/answers/help 将不胜感激。

您可以从请求中获取已解析的绑定

$product = $this->route('product');

在您的 rules 方法中,您可以使用上述方法获取产品实例。

public function rules()
{
    $product = $this->route('product');
    return [
        'name' => 'required|max:255|unique:products,name'.$product->id,
        'description' => 'required',
        'price' => 'required|numeric|max:500',
        'stock' => 'required|max:6',
        'discount' => 'required:max:2'
    ];
}

这就是我在更新时验证唯一产品名称的方式。我将产品 ID 作为路由参数传递,使用 unique 验证规则来验证产品 name 在数据库中不存在 except 此产品 (id)。

class ProductController extends Controller {

    public function update(Request $request, $id) {
        $this->validate($request, [
            'name' => 'required|max:255|unique:products,name'.$id,
        ]);

        // ...
    }

}

对于验证规则中的自定义请求,您可以将您的 查看 :

<input type="hidden" value="product_id">

在验证请求中:

public function rules()
{
    $product_id = $this->request->get('product_id');

    return [
      //
    ];
}