簡體   English   中英

Laravel 表單請求驗證存儲和更新使用相同的驗證

[英]Laravel form request validation on store and update use same validation

我創建了 laravel 表單驗證請求並且對該驗證有獨特的規則。

我想在storeupdate方法上使用它,而無需再次創建新的表單請求驗證。

但問題是當store時id不存在並且驗證通過並且在update時我未能通過驗證因為存儲中存在id

我想忽略unique規則上的 id 但使用相同的表單驗證請求

如果存儲或更新方法中的此操作忽略唯一 ID,檢查表單驗證請求 class 的最佳做法是什么?

好的..我可以像@porloscerros Ψ 建議的那樣做

    public function rules()
    {
        $rules = [
            'name' => 'required|string|unique:products|max:255',
        ];

        if (in_array($this->method(), ['PUT', 'PATCH'])) {
            $product = $this->route()->parameter('product');

            $rules['name'] = [
                'required',
                'string',
                'max:255',
                Rule::unique('loan_products')->ignore($product),
            ];
        }

        return $rules;
    }

試試這個,它對我有用。

Laravel 唯一性:第三個參數可以排除記錄的 id 例如,像這樣:

public function rules()
{
  return [
     'name' => 'required|string|max:255|unique:products,'.$this->id,      
  ];
}

為什么在 FormRequest 中storeupdate時檢查id 你不需要這個。 id像參數一樣出現在控制器的方法中。 Or laravel will create the model using DI in the your controller's method public function update(User $user) and then you can use $user like an instance of User model. You may check the id in web.php or api.php: https://laravel.com/docs/7.x/routing#parameters-regular-expression-constraints

我建議您不要將一個 FormRequest 用於兩種方法。 這是不好的做法

我用這個

$validated = $request->validated();

使用這個方法:

public function createAccount(RegisterRequest $request)
{
    $attr = $request->validated();

而不是這樣的:

public function createAccount(Request $request)
{
    $attr = $request->validate([
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|unique:users,email',
        'password' => 'required|string|min:6|confirmed'
    ]);

使用php artisan make:request RegisterRequest

public function rules()
{
    return [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|unique:users,email',
        'password' => 'required|string|min:6|confirmed'
    ];
}
public function rules()
{
    if (request()->isMethod('post')) {
        $rules = [
            'image' => 'required|image|mimes:jpeg,jpg,png|max:2000',
            'name' => 'required|unique:categories'
        ];
    } elseif (request()->isMethod('PUT')) {
        $rules = [
            'name' => 'required|unique:categories,name'
        ];
    }
    return $rules;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM