laravel请求验证规则传递参数

Sam*_*ong 5 laravel laravel-5.5

我直接说到这里,我想知道是否有可能validation rule在Laravel中传递参数。

这是我的代码:

我需要$product->idProductUpdateRequest课程传递给全班。

我已经阅读了一些文章,但无济于事不能将参数传递给它。我的另一种解决方案是不使用验证规则类,而通过使用直接在控制器上进行验证$request->validate[()]。由于我可以访问$product->id控制器上的,因此可以轻松进行验证。但出于好奇是有我的方式来传递$product->idvalidation class

控制器

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);
    }
Run Code Online (Sandbox Code Playgroud)

验证规则

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'
    ];
}
Run Code Online (Sandbox Code Playgroud)

任何建议/答案/帮助将不胜感激。

cha*_*fdo 12

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

$product = $this->route('product');
Run Code Online (Sandbox Code Playgroud)

在您的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'
    ];
}
Run Code Online (Sandbox Code Playgroud)

  • 这是路由模型绑定。https://laravel.com/docs/5.6/routing#route-model-binding (2认同)